|
| 1 | +[role="xpack"] |
| 2 | +[[token-authentication-services]] |
| 3 | +=== Token-based authentication services |
| 4 | + |
| 5 | +The {stack-security-features} authenticate users by using realms and one or more token-based |
| 6 | +authentication services. The token-based authentication services are used for |
| 7 | +authentication and for the management of tokens. These tokens can be used as |
| 8 | +credentials attached to requests that are sent to {es}. When {es} receives a request |
| 9 | +that must be authenticated, it consults first the token-based authentication |
| 10 | +services then the realm chain. |
| 11 | + |
| 12 | +The {security-features} provide the following built-in token-based authentication |
| 13 | +services, which are listed in the order they are consulted: |
| 14 | + |
| 15 | +_token-service_:: |
| 16 | +The token service uses the <<security-api-get-token,get token API>> to |
| 17 | +generate access tokens and refresh tokens based on the OAuth2 specification. |
| 18 | +The access token is a short-lived token. By default, it expires after 20 minutes |
| 19 | +but it can be configured to last a maximum of 1 hour. It can be refreshed by |
| 20 | +using a refresh token, which has a lifetime of 24 hours. The access token is a |
| 21 | +bearer token. You can use it by sending a request with an `Authorization` |
| 22 | +header with a value that has the prefix "Bearer " followed by the value of the |
| 23 | +access token. For example: |
| 24 | ++ |
| 25 | +-- |
| 26 | +[source,shell] |
| 27 | +-------------------------------------------------- |
| 28 | +curl -H "Authorization: Bearer dGhpcyBpcyBub3QgYSByZWFsIHRva2VuIGJ1dCBpdCBpcyBvbmx5IHRlc3QgZGF0YS4gZG8gbm90IHRyeSB0byByZWFkIHRva2VuIQ==" http://localhost:9200/_cluster/health |
| 29 | +-------------------------------------------------- |
| 30 | +// NOTCONSOLE |
| 31 | +-- |
| 32 | + |
| 33 | +_api-key-service_:: |
| 34 | +The API key service uses the |
| 35 | +<<security-api-create-api-key,create API key API>> to generate API keys. |
| 36 | +By default, the API keys do not expire. When you make a request to create API |
| 37 | +keys, you can specify an expiration and permissions for the API key. The |
| 38 | +permissions are limited by the authenticated user's permissions. You can use the |
| 39 | +API key by sending a request with an `Authorization` header with a value that |
| 40 | +has the prefix "ApiKey " followed by the credentials. The credentials are the |
| 41 | +base64 encoding of the API key ID and the API key joined by a colon. For example: |
| 42 | ++ |
| 43 | +-- |
| 44 | +[source,shell] |
| 45 | +-------------------------------------------------- |
| 46 | +curl -H "Authorization: ApiKey VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==" http://localhost:9200/_cluster/health |
| 47 | +-------------------------------------------------- |
| 48 | +// NOTCONSOLE |
| 49 | +-- |
| 50 | + |
| 51 | +Depending on your use case, you may want to decide on the lifetime of the tokens |
| 52 | +generated by these services. You can then use this information to decide which |
| 53 | +service to use to generate and manage the tokens. Non-expiring API keys may seem |
| 54 | +like the easy option but you must consider the security implications that come |
| 55 | +with non-expiring keys. Both the _token-service_ and _api-key-service_ permit |
| 56 | +you to invalidate the tokens. See |
| 57 | +<<security-api-invalidate-token,invalidate token API>> and |
| 58 | +<<security-api-invalidate-api-key,invalidate API key API>>. |
0 commit comments