mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			175 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ---
 | |
| title: API Tokens and Client Keys
 | |
| pagination_next: reference/front-end-api
 | |
| ---
 | |
| 
 | |
| ## Overview
 | |
| 
 | |
| Unleash uses API keys to facilitate communication between consuming clients such as [SDKs](../reference/sdks), [Unleash Edge](../reference/unleash-edge), or other tools and automation.
 | |
| 
 | |
| Unleash supports the following types of API tokens:
 | |
| - [Client tokens](#client-tokens) for connecting [server-side client SDKs](../reference/sdks#server-side-sdks), [Unleash Edge](../reference/unleash-edge), and [Unleash Proxy](../reference/unleash-proxy) to Unleash.
 | |
| - [Frontend tokens](#frontend-tokens) for connecting [client-side SDKs](../reference/sdks#client-side-sdks) to Unleash using the [Frontend API](../reference/front-end-api) or [Unleash Edge](../reference/unleash-edge).
 | |
| - [Personal access tokens](#personal-access-tokens) for testing and debugging or providing temporary access to an automation tool.
 | |
| - [Service account tokens](/reference/service-accounts) for providing API access to integrations or automation tools.
 | |
| 
 | |
| To connect a client-side SDK to Unleash using Unleash Edge, you need both a [client](#client-tokens) and [frontend token](#frontend-tokens). See [Connect a client-side SDK to Unleash using Edge](#connect-a-client-side-sdk-to-unleash-using-edge) for an example.
 | |
| 
 | |
| ## API token types
 | |
| 
 | |
| ### Client tokens
 | |
| 
 | |
| Client tokens are intended for use in [server-side client SDKs](../reference/sdks#server-side-sdks), [Unleash Edge](../reference/unleash-edge), and [Unleash Proxy](../reference/unleash-proxy) to grant the permissions to:
 | |
| -   Reading feature flag information
 | |
| -   Registering applications with the Unleash server
 | |
| -   Sending usage metrics
 | |
| 
 | |
| Client tokens are scoped to one or more projects and a single environment. When creating a client token, you can give it access to a specific list of projects or to all current or future projects. Client tokens are secrets and must not be exposed to end users.
 | |
| 
 | |
| Client tokens cannot be used in frontend SDKs; use [frontend tokens](#frontend-tokens) instead.
 | |
| 
 | |
| ### Frontend tokens
 | |
| 
 | |
| Use frontend tokens for connecting [frontend SDKs](../reference/sdks#client-side-sdks) to Unleash using the [Unleash Frontend API](./front-end-api) or [Unleash Edge](../reference/unleash-edge). They grant the user permission to:
 | |
| -   Reading enabled flags for a given context
 | |
| -   Registering applications with the Unleash server
 | |
| -   Sending usage metrics
 | |
| 
 | |
| Frontend tokens are scoped to one or more projects and a single environment. When creating a frontend token, you can give it access to a specific list of projects or to all current or future projects. Frontend tokens are not considered secret and are safe to expose client-side.
 | |
| 
 | |
| Frontend tokens cannot be used in server-side SDKs; use [client tokens](#client-tokens) instead.
 | |
| 
 | |
| ### Personal access tokens
 | |
| 
 | |
| Personal access tokens reflect the permissions of the user who creates them. If the user's permissions change, such as through the addition of a custom role, the token automatically updates to match the new permissions.
 | |
| You can use personal access tokens for testing, debugging, or giving temporary access to automation tools.
 | |
| 
 | |
| When you use a personal access token to modify resources, the events record the token creator's name for that operation.
 | |
| 
 | |
| Personal access tokens with a lifetime expire and stop working after their expiration date. Although you can set the token to not expire, we recommend using tokens with expiration dates to follow security best practices.
 | |
| 
 | |
| Personal access tokens are not suitable for client SDKs, as they are not bound to an environment, they may expire, or their permissions may change. Use [client tokens](#client-tokens) instead.
 | |
| 
 | |
| ### Service account tokens
 | |
| 
 | |
| Service account tokens provide API access to integration and automation tools. To learn more, go to [Service Accounts](/reference/service-accounts).
 | |
| 
 | |
| ### Admin tokens
 | |
| 
 | |
| :::warning
 | |
| 
 | |
| Admin tokens are deprecated. Use other token types:
 | |
| - With [Open Source](https://www.getunleash.io/pricing) and [Pro](../availability#plans); use [personal access tokens](#personal-access-tokens).
 | |
| - With [Enterprise](https://www.getunleash.io/pricing); use [service accounts](./service-accounts).
 | |
| 
 | |
| :::
 | |
| 
 | |
| Admin tokens grant full read and write access to all resources in the Unleash server API. This includes all projects, all environments, and all [root resources](../reference/rbac).
 | |
| 
 | |
| 
 | |
| ## API token permissions
 | |
| 
 | |
| :::note Availability
 | |
| 
 | |
| **Version**: `4.22+`
 | |
| 
 | |
| :::
 | |
| 
 | |
| The following table provides a summary of what actions different roles can perform with API tokens:
 | |
| 
 | |
| | Role/Permission                               | Details                                                                 |
 | |
| |-----------------------------------------------|-------------------------------------------------------------------------|
 | |
| | Admin root role                               | Can view, create, update, or delete tokens for any project.             |
 | |
| | Custom root role with API token permission    | Can view, create, update, or delete tokens for any project with the corresponding permission, such as `CREATE_CLIENT_API_TOKEN`. |
 | |
| | Member project role                           | Can view, create, update, or delete tokens within the project.          |
 | |
| | Custom project role with API token permission | Can view, create, update, or delete tokens within the project with the corresponding permission, `CREATE_PROJECT_API_TOKEN`. |
 | |
| | Viewer root role                              | Cannot view, create, update, or delete tokens.                          |
 | |
| | Any role                                      | Can create personal access tokens.                          | 
 | |
| 
 | |
| ## API token format
 | |
| 
 | |
| API tokens consist of three parts:
 | |
| 
 | |
| 1. Project information
 | |
| 2. Environment
 | |
| 3. Hash
 | |
| 
 | |
| The parts are separated by two delimiters: a colon (`:`) between the projects and the environment, and a period (`.`) between the environment and the hash.
 | |
| 
 | |
| ```
 | |
| {{projects}}:{{environment}}.{{hash}}
 | |
| ```
 | |
| 
 | |
| The project value of the token can be one of:
 | |
| -   A single project ID, for example, `default`: when the token can only access a single project.
 | |
| -   `[]`: when the token is valid for a specific set of projects. The list of projects is not shown in the token.
 | |
| -   `*`: when the token is valid for all current and future projects.
 | |
| 
 | |
| The environment value of the token is the name of an environment on your Unleash instance, such as `development`. The hash is a 64-character-long hexadecimal string.
 | |
| 
 | |
| Personal access tokens start with the string `user`, and do not contain additional project or environment information.
 | |
| 
 | |
| Some example API tokens are:
 | |
| 
 | |
| -   A token with access to the `development` environment of a single project, `new-checkout-flow`:
 | |
|     ```
 | |
|     new-checkout-flow:development.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178
 | |
|     ```
 | |
| -   A token with access to the `production` environment in multiple projects:
 | |
|     ```
 | |
|     []:production.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178
 | |
|     ```
 | |
| -   A token with access to the `development` environment in all current and future projects:
 | |
|     ```
 | |
|     *:development.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178
 | |
|     ```
 | |
| -   A personal access token:
 | |
|     ```
 | |
|     user:be7536c3a160ff15e3a92da45de531dd54bc1ae15d8455c0476f086b
 | |
|     ```
 | |
| 
 | |
| 
 | |
| Note, in Unleash v4.3 or less, API tokens are a 64-character-long hexadecimal string with no additional information. For example:
 | |
| 
 | |
| ```
 | |
| be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178
 | |
| ```
 | |
| 
 | |
| ## Create an API token
 | |
| 
 | |
| Depending on your [permissions](#api-token-permissions), you can create API tokens in the Unleash Admin UI in three ways:
 | |
| - **Admin > API access**: for client or frontend tokens; requires the Admin root role, or a custom root role with [API token permissions](#api-token-permissions).
 | |
| - **Settings > API access** inside a project: for project-specific client or frontend tokens; permitted for project Members or users with a [corresponding root role](#api-token-permissions).
 | |
| - **Profile > View profile settings > Personal API tokens**: for [personal access tokens](#personal-access-tokens).
 | |
| 
 | |
| ## Connect a client-side SDK to Unleash using Edge
 | |
| 
 | |
| To connect a client-side SDK to Unleash using Unleash Edge, you need both a [client](#client-tokens) and [frontend token](#frontend-tokens):
 | |
|     - The client-side SDK needs a frontend token to communicate with Edge.
 | |
|     - Edge needs a client token to communicate with the Unleash server.
 | |
| 
 | |
| Ensure that the client token has at least the same project and environment scope as the frontend token.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| ## Proxy client keys
 | |
| 
 | |
| :::warning
 | |
| 
 | |
| Unleash Proxy is in maintenance mode. Use [Unleash Edge](../reference/unleash-edge) instead.
 | |
| 
 | |
| :::
 | |
| 
 | |
| You can use proxy client keys to connect [frontend SDKs](../reference/sdks#client-side-sdks) to [Unleash Proxy](../reference/unleash-proxy). Proxy client keys are not considered a secret and are safe to expose client-side.
 | |
| 
 | |
| Proxy client keys are arbitrary strings that you provide the Unleash proxy with on startup. They can be any string you choose, and you create them yourself.
 | |
| 
 | |
| :::info Creating proxy client keys
 | |
| 
 | |
| To designate a string as a proxy client key, add it to the `clientKeys` list when [starting the proxy](../reference/unleash-proxy#configuration-options). Connecting clients should then specify the same string as their client key.
 | |
| 
 | |
| :::
 | |
| 
 | |
| Proxy client keys cannot be used to connect to the Unleash API; use API tokens instead.
 |