From b4acbb5e16ac145a9a1d085bf4f9adf949fee6ab Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 16 Aug 2023 10:28:33 -0400 Subject: [PATCH] Closes #13439: Update API token documentation --- docs/configuration/security.md | 2 +- docs/integrations/rest-api.md | 17 ++++++++--------- docs/media/admin_ui_grant_permission.png | Bin 33454 -> 0 bytes docs/release-notes/version-3.6.md | 1 + 4 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 docs/media/admin_ui_grant_permission.png diff --git a/docs/configuration/security.md b/docs/configuration/security.md index a6dc4c5ce..2ae92285f 100644 --- a/docs/configuration/security.md +++ b/docs/configuration/security.md @@ -4,7 +4,7 @@ Default: True -If disabled, the values of API tokens will not be displayed after each token's initial creation. A user **must** record the value of a token immediately upon its creation, or it will be lost. Note that this affects _all_ users, regardless of assigned permissions. +If disabled, the values of API tokens will not be displayed after each token's initial creation. A user **must** record the value of a token prior to its creation, or it will be lost. Note that this affects _all_ users, regardless of assigned permissions. --- diff --git a/docs/integrations/rest-api.md b/docs/integrations/rest-api.md index 9d6367b3e..03a34abf4 100644 --- a/docs/integrations/rest-api.md +++ b/docs/integrations/rest-api.md @@ -570,27 +570,26 @@ The NetBox REST API primarily employs token-based authentication. For convenienc A token is a unique identifier mapped to a NetBox user account. Each user may have one or more tokens which he or she can use for authentication when making REST API requests. To create a token, navigate to the API tokens page under your user profile. -!!! note - All users can create and manage REST API tokens under the user control panel in the UI. The ability to view, add, change, or delete tokens via the REST API itself is controlled by the relevant model permissions, assigned to users and/or groups in the admin UI. These permissions should be used with great care to avoid accidentally permitting a user to create tokens for other user accounts. +By default, all users can create and manage their own REST API tokens under the user control panel in the UI or via the REST API. This ability can be disabled by overriding the [`DEFAULT_PERMISSIONS`](../configuration/security.md#default_permissions) configuration parameter. Each token contains a 160-bit key represented as 40 hexadecimal characters. When creating a token, you'll typically leave the key field blank so that a random key will be automatically generated. However, NetBox allows you to specify a key in case you need to restore a previously deleted token to operation. -By default, a token can be used to perform all actions via the API that a user would be permitted to do via the web UI. Deselecting the "write enabled" option will restrict API requests made with the token to read operations (e.g. GET) only. - Additionally, a token can be set to expire at a specific time. This can be useful if an external client needs to be granted temporary access to NetBox. -!!! warning "Restricting Token Retrieval" +!!! info "Restricting Token Retrieval" The ability to retrieve the key value of a previously-created API token can be restricted by disabling the [`ALLOW_TOKEN_RETRIEVAL`](../configuration/security.md#allow_token_retrieval) configuration parameter. +### Restricting Write Operations + +By default, a token can be used to perform all actions via the API that a user would be permitted to do via the web UI. Deselecting the "write enabled" option will restrict API requests made with the token to read operations (e.g. GET) only. + #### Client IP Restriction Each API token can optionally be restricted by client IP address. If one or more allowed IP prefixes/addresses is defined for a token, authentication will fail for any client connecting from an IP address outside the defined range(s). This enables restricting the use a token to a specific client. (By default, any client IP address is permitted.) #### Creating Tokens for Other Users -It is possible to provision authentication tokens for other users via the REST API. To do, so the requesting user must have the `users.grant_token` permission assigned. While all users have inherent permission to create their own tokens, this permission is required to enable the creation of tokens for other users. - -![Adding the grant action to a permission](../media/admin_ui_grant_permission.png) +It is possible to provision authentication tokens for other users via the REST API. To do, so the requesting user must have the `users.grant_token` permission assigned. While all users have inherent permission by default to create their own tokens, this permission is required to enable the creation of tokens for other users. !!! warning "Exercise Caution" The ability to create tokens on behalf of other users enables the requestor to access the created token. This ability is intended e.g. for the provisioning of tokens by automated services, and should be used with extreme caution to avoid a security compromise. @@ -627,7 +626,7 @@ When a token is used to authenticate a request, its `last_updated` time updated ### Initial Token Provisioning -Ideally, each user should provision his or her own REST API token(s) via the web UI. However, you may encounter where a token must be created by a user via the REST API itself. NetBox provides a special endpoint to provision tokens using a valid username and password combination. +Ideally, each user should provision his or her own API token(s) via the web UI. However, you may encounter a scenario where a token must be created by a user via the REST API itself. NetBox provides a special endpoint to provision tokens using a valid username and password combination. (Note that the user must have permission to create API tokens regardless of the interface used.) To provision a token via the REST API, make a `POST` request to the `/api/users/tokens/provision/` endpoint: diff --git a/docs/media/admin_ui_grant_permission.png b/docs/media/admin_ui_grant_permission.png deleted file mode 100644 index 2b82dcca200f77e34570e002a8e42ffd2d485bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33454 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