General Information
Abstract
The auth-app service provides authentication for 3rd party apps unable to use OpenID Connect. The service is enabled by default and started automatically. It is possible to disable the service by setting:
OC_EXCLUDE_RUN_SERVICES=auth-app # deployment specific. Removes service from the list of automatically started services, use with single-binary deployments
PROXY_ENABLE_APP_AUTH=false # mandatory, disables app authentication. In case of a distributed environment, this envvar needs to be set in the proxy service.
Table of Contents
- App Tokens
- Important Security Note
- Managing App Tokens
- Authenticating using App Tokens
- Example Yaml Config
App Tokens
App Tokens are password specifically generated to be used by 3rd party applications for authentication when accessing the OpenCloud API endpoints. To be able to use an app token, one must first create a token. There are different options of creating a token.
Important Security Note
When using an external IDP for authentication, App Token are NOT invalidated when the user is disabled or locked in that external IDP. That means the user will still be able to use its existing App Tokens for authentication for as long as the App Tokes are valid.
Managing App Tokens
Via API
Please note: This API is preliminary. In the future we will provide endpoints
in the graph
service for allowing the management of App Tokens.
The auth-app
service provides an API to create (POST), list (GET) and delete (DELETE) tokens at the /auth-app/tokens
endpoint.
-
Create a token
The POST request requires:- A
expiry
key/value pair in the form ofexpiry=<number><h|m|s>
Example:expiry=72h
curl --request POST 'https://<your host:9200>/auth-app/tokens?expiry={value}' \
--header 'accept: application/json'Example output:
{
"token": "3s2K7816M4vuSpd5",
"expiration_date": "2024-08-08T13:42:42.796888022+02:00",
"created_date": "2024-08-07T13:42:42+02:00",
"label": "Generated via API"
}Note, that this is the only time the app token will be returned in cleartext. To use the token please copy it from the response.
- A
-
List tokens\
curl --request GET 'https://<your host:9200>/auth-app/tokens' \
--header 'accept: application/json'Note that the
token
value in the response to the "List Tokens` request is not the actual app token, but a hashed value of the token. So this value cannot be used for authenticating with the token.Example output:
[
{
"token": "$2a$11$EyudDGAJ18bBf5NG6PL9Ru9gygZAu0oPyLawdieNjGozcbXyyuUhG",
"expiration_date": "2024-08-08T13:44:31.025199075+02:00",
"created_date": "2024-08-07T13:44:31+02:00",
"label": "Generated via Impersonation API"
},
{
"token": "$2a$11$dfRBQrxRMPg8fvyvkFwaX.IPoIUiokvhzK.YNI/pCafk0us3MyPzy",
"expiration_date": "2024-08-08T13:46:41.936052281+02:00",
"created_date": "2024-08-07T13:46:42+02:00",
"label": "Generated via Impersonation API"
}
] -
Delete a token
The DELETE request requires:- A
token
key/value pair in the form oftoken=<token_issued>
. The value needs to be the hashed value as returned by theList Tokens
respone.
Example:token=$2$Z3s2K7816M4vuSpd5
curl --request DELETE 'https://<your host:9200>/auth-app/tokens?token={value}' \
--header 'accept: application/json' - A
Via Impersonation API
When setting the environment variable AUTH_APP_ENABLE_IMPERSONATION
to
true
, admins will be able to use the /auth-app/tokens
endpoint to create
tokens for other users. This can be important for migration scenarios, but
should not be considered for regular tasks on a production system for security
reasons.
To impersonate, the respective requests from the CLI commands above extend with the following parameters, where you can use one or the other:
-
The
userID
in the form of:userID={value}
Example:
userID=4c510ada- ... -42cdf82c3d51
-
The
userName
in the form of:userName={value}
Example:
userName=alan
Example:
A final create request would then look like:
curl --request POST 'https://<your host:9200>/auth-app/tokens?expiry={value}&userName={value}' \
--header 'accept: application/json'
Via CLI (developer only)
As the CLI is using the internal CS3Apis this needs access to the reva gateway
service. This is mainly of developer (and admin) usage.
Replace the user-name
with an existing user. For the token-expiration
, you
can use any time abbreviation from the following list: h, m, s
. Examples:
72h
or 1h
or 1m
or 1s.
Default is 72h
.
opencloud auth-app create --user-name={user-name} --expiration={token-expiration}
Authenticating using App Tokens
To autenticate using an App Token simply use the username for which token was generated and the token value as returned by the "Create Token" request.
curl -u <username>:<tokenvalue> 'https://<your host>/graph/v1.0/me' \
--header 'accept: application/json'