Authentication
Robot Raconteur provides a built-in authentication system. During connection, a client can specify a “username” of type
string
, and “credentials” of type varvalue{string}
. Normally the credentials contains a simple string entry for the
password, but some authentication methods may require more complex credentials like a token/password pair. A connection
example:
credentials={"password", RR.VarValue("mypassword","string")}
obj=RRN.ConnectService( "rr+tcp://localhost:2354?service=Create","myusername",credentials)
Of course the current example service does not have authentication enabled. The first step is to create a
UserAuthenticator
. The UserAuthenticator
will receive the authentication requests and compare the username and
credentials. If they are correct, the user is authenticated. The only authenticator currently available is the
PasswordFileUserAuthenticator
. This authenticator uses a plain-text string that contains the user definitions, one
per line. There are three entries separated by spaces: the username, the MD5 hash of the password, and a comma separated
list of credentials (no spaces between). The two credentials of interest are “objectlock” and “objectlockoverride”. The
meaning of these is discussed in Section [objectlocks]. Example [passwordfile]
shows the contents of a simple password file. The MD5 hash for the password can be generated using “RobotRaconteurGen”.
RobotRaconteurGen –md5passwordhash mypassword``
myusername 34819d7beeabb9260a5c854bc85b3e44 objectlock
anotherusername 1910ea24600608b01b5efd7d4ea6a840 objectlock
superuser f1bc69265be1165f64296bcb7ca180d5 objectlock,objectlockoverride``
The PasswordFileUserAuthenticator
can now be initialized:
with open('passwords.txt') as content_file:
content=content_file.read()
p=RR.PasswordFileUserAuthenticator(content)
The next step is to create a ServiceSecurityPolicy
that describes the security requirements. The policy contains the
authenticator and a dictionary of policies. Currently only “requirevaliduser” and “allowobjectlock” are valid, and both
should be set to “true”.
policies={"requirevaliduser" : "true", "allowobjectlock" : "true"}
s=RR.ServiceSecurityPolicy(p,policies)
Finally, the service can be registered using the policy.
RRN.RegisterService("Create","experimental.create.Create",obj)
ServerEndpoint
class static method. The currentAuthenticatedUser
can be retrieved:user=RR.ServerEndpoint.GetCurrentAuthenticatedUser()
AuthenticatedUser
contains the fields Username
, LoginTime
, LastAccessTime
, and Privileges
fields
to help determine the user currently accessing the service. This function will work during all transactional calls to
the service.The authenticated user will be logged out when the client connection is closed or after a timeout of typically 15 minutes.