Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[REST Auth] API tokens & openhab:users console command #1735

Merged
merged 12 commits into from
Oct 25, 2020

Commits on Oct 20, 2020

  1. [REST Auth] API tokens & openhab:users console command

    This adds API tokens as a new credential type. Their format is:
    `oh.<name>.<random chars>`
    
    The "oh." prefix is used to tell them apart from a JWT access token,
    because they're both used as a Bearer authorization scheme, but there
    is no semantic value attached to any of the other parts.
    
    They are stored hashed in the user's profile, and can be listed, added
    or removed managed with the new `openhab:users` console command.
    
    Currently the scopes are still not checked, but ultimately they could
    be, for instance a scope of e.g. `user admin.items` would mean that the
    API token can be used to perform user operations like retrieving info
    or sending a command, _and_ managing the items, but nothing else -
    even if the user has more permissions because of their role (which
    will of course still be checked).
    
    Tokens are normally passed in the Authorization header with the Bearer
    scheme, or the X-OPENHAB-TOKEN header, like access tokens.
    As a special exception, API tokens can also be used with the Basic
    authorization scheme, **even if the allowBasicAuth** option is not
    enabled in the "API Security" service, because there's no additional
    security risk in allowing that. In that case, the token should be
    passed as the username and the password MUST be empty.
    
    In short, this means that all these curl commands will work:
    - `curl -H 'Authorization: Bearer <token>' http://localhost:8080/rest/inbox`
    - `curl -H 'X-OPENHAB-TOKEN: <token>' http://localhost:8080/rest/inbox`
    - `curl -u '<token>[:]' http://localhost:8080/rest/inbox`
    - `curl http://<token>@localhost:8080/rest/inbox`
    
    2 REST API operations were adding to the AuthResource, to allow
    authenticated users to list their tokens or remove (revoke) one.
    Self-service for creating a token or changing the password is more
    sensitive so these should be handled with a servlet and pages devoid
    of any JavaScript instead of REST API calls, therefore for now they'll
    have to be done with the console.
    
    This also fixes regressions introduced with openhab#1713 - the operations
    annotated with @RolesAllowed({ Role.USER }) only were not authorized
    for administrators anymore.
    
    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 20, 2020
    Configuration menu
    Copy the full SHA
    b459cbc View commit details
    Browse the repository at this point in the history
  2. Generate a unique salt for each token

    Reusing the password salt is bad practice, and changing the
    password changes the salt as well which makes all tokens
    invalid.
    
    Put the salt in the same field as the hash (concatenated
    with a separator) to avoid modifying the JSON DB schema.
    
    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 20, 2020
    Configuration menu
    Copy the full SHA
    9d099c7 View commit details
    Browse the repository at this point in the history
  3. Fix API token authentication, make scope available to security context

    The X-OPENHAB-TOKEN header now has priority over the Authorization
    header to credentials, if both are set.
    
    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 20, 2020
    Configuration menu
    Copy the full SHA
    fe67008 View commit details
    Browse the repository at this point in the history
  4. Add self-service pages to change password & create new API token

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 20, 2020
    Configuration menu
    Copy the full SHA
    07de0ce View commit details
    Browse the repository at this point in the history
  5. Fix SAT error

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 20, 2020
    Configuration menu
    Copy the full SHA
    6d9cbf9 View commit details
    Browse the repository at this point in the history

Commits on Oct 22, 2020

  1. Address review comments

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 22, 2020
    Configuration menu
    Copy the full SHA
    ea523af View commit details
    Browse the repository at this point in the history
  2. Missing closing paren

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 22, 2020
    Configuration menu
    Copy the full SHA
    62c4e6f View commit details
    Browse the repository at this point in the history
  3. Fix error message when token name doesn't match pattern

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 22, 2020
    Configuration menu
    Copy the full SHA
    f051da1 View commit details
    Browse the repository at this point in the history

Commits on Oct 23, 2020

  1. Address more review comments

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 23, 2020
    Configuration menu
    Copy the full SHA
    0bbaa29 View commit details
    Browse the repository at this point in the history
  2. Fix removeUserSession in UserRegistryImpl

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 23, 2020
    Configuration menu
    Copy the full SHA
    d5bf4a4 View commit details
    Browse the repository at this point in the history
  3. Add UserRegistryImplTest

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 23, 2020
    Configuration menu
    Copy the full SHA
    e486af4 View commit details
    Browse the repository at this point in the history

Commits on Oct 25, 2020

  1. Fix null annotations warnings in TokenResource

    Signed-off-by: Yannick Schaus <github@schaus.net>
    ghys committed Oct 25, 2020
    Configuration menu
    Copy the full SHA
    ef5f4a7 View commit details
    Browse the repository at this point in the history