mormot2安全令牌/质询安全和活动会话列表
mormot2安全令牌/质询安全和活动会话列表
unit mormot.crypt.secure
/// abstract authentication class, implementing safe token/challenge security // and a list of active sessions // - do not use this class, but plain TSynAuthentication TSynAuthenticationAbstract = class protected fSessions: TIntegerDynArray; fSessionsCount: integer; fSessionGenerator: integer; fTokenSeed: Int64; fSafe: TSynLocker; function ComputeCredential(previous: boolean; const UserName, PassWord: RawUtf8): cardinal; virtual; function GetPassword(const UserName: RawUtf8; out Password: RawUtf8): boolean; virtual; abstract; function GetUsersCount: integer; virtual; abstract; // check the given Hash challenge, against stored credentials function CheckCredentials(const UserName: RawUtf8; Hash: cardinal): boolean; virtual; public /// initialize the authentication scheme constructor Create; /// finalize the authentation destructor Destroy; override; /// register one credential for a given user // - this abstract method will raise an exception: inherited classes should // implement them as expected procedure AuthenticateUser(const aName, aPassword: RawUtf8); virtual; /// unregister one credential for a given user // - this abstract method will raise an exception: inherited classes should // implement them as expected procedure DisauthenticateUser(const aName: RawUtf8); virtual; /// create a new session // - should return 0 on authentication error, or an integer session ID // - this method will check the User name and password, and create a new session function CreateSession(const User: RawUtf8; Hash: cardinal): integer; virtual; /// check if the session exists in the internal list function SessionExists(aID: integer): boolean; /// delete a session procedure RemoveSession(aID: integer); /// returns the current identification token // - to be sent to the client for its authentication challenge function CurrentToken: Int64; /// the number of current opened sessions property SessionsCount: integer read fSessionsCount; /// the number of registered users property UsersCount: integer read GetUsersCount; /// to be used to compute a Hash on the client sude, for a given Token // - the token should have been retrieved from the server, and the client // should compute and return this hash value, to perform the authentication // challenge and create the session // - internal algorithm is not cryptographic secure, but fast and safe class function ComputeHash(Token: Int64; const UserName, PassWord: RawUtf8): cardinal; virtual; end;
/// simple authentication class, implementing safe token/challenge security // - maintain a list of user / name credential pairs, and a list of sessions // - is not meant to handle authorization, just plain user access validation // - used e.g. by TSqlDBConnection.RemoteProcessMessage (on server side) and // TSqlDBProxyConnectionPropertiesAbstract (on client side) in mormot.db.proxy TSynAuthentication = class(TSynAuthenticationAbstract) protected fCredentials: TSynNameValue; // store user/password pairs function GetPassword(const UserName: RawUtf8; out Password: RawUtf8): boolean; override; function GetUsersCount: integer; override; public /// initialize the authentication scheme // - you can optionally register one user credential constructor Create(const aUserName: RawUtf8 = ''; const aPassword: RawUtf8 = ''); reintroduce; /// register one credential for a given user procedure AuthenticateUser(const aName, aPassword: RawUtf8); override; /// unregister one credential for a given user procedure DisauthenticateUser(const aName: RawUtf8); override; end;
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/17220955.html