Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Current »

Important Notes

  • No allowance for granular permissioning. All users will have access to all data.
    • We intend to support the use cases where an application uses a single set of creds. There may be a few other creds for admins to occasionally access Concourse via the command line. Either way, there is really no need to support granular permissions.

Authentication Flow

  • Client calls login(username, password) and gets an AuthToken
  • The AuthToken is maintained on the server
  • The client sends the AuthToken with each RPC request

Granting Access

  • JMX operations
    • grantAccess(username, password) --> create/edit creds
    • revokeAccess(username) 
  • DO NOT allow the removal of "root" user

AccessControlManager

The AccessControlManager is maintained at the server level and is used to guard access to the Engine.

  • Map<String, ByteBuffer/byte[]> credentials (user -> password)
  • Map<AccessToken, String> sessions (token -> user)

TODO: How to handle token expiration?? Should that be included in the AccessToken object?

Each time the service sees a token, it checks to see if exists in the db and is not expired and matches the username

Server Based Security

Access control should be managed at the Server level (instead of the Engine).

  • The Engine manages how data is stored. Access controls should not alter the way data is stored
  • If the Engine doesn't know about access control, then we can more easily replace the Engine in the future

Open Questions

  1. Should we require user authentication to invoke managed operations from the command line?
    1. These operations do not go through the client, so we would have to a) create special JMX hook into the server based authentication scheme or b) create a separate authentication scheme for managed operations.
  2. How should we hash passwords?
    1. Do we need a master serverKey hash? How is this generated and where is it stored?
    2. Do we need salt per user?
    3. Which hash algorithm should we use?
  3. Do we need to associate a fingerprint (ip address, etc) with each AccessToken?
    1. How would we get this info server side? Does the client need to pass it along when logging in?

 

  • No labels