# 个人访问令牌[](#个人访问令牌 "Permalink")

版本历史

*   在 GitLab 8.8 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/3749) .
*   在 GitLab 12.6 中添加了[有关令牌过期的通知](https://gitlab.com/gitlab-org/gitlab/-/issues/3649) .
*   在[GitLab Ultimate](https://about.gitlab.com/pricing/) 12.6 中添加了[令牌生存期限制](https://gitlab.com/gitlab-org/gitlab/-/issues/3649) .

If you’re unable to use [OAuth2](../../api/oauth2.html), you can use a personal access token to authenticate with the [GitLab API](../../api/README.html#personalproject-access-tokens).

您还可以将个人访问令牌与 Git 一起使用，以通过 HTTP 或 SSH 进行身份验证. 启用[两因素身份验证（2FA）](../account/two_factor_authentication.html)时，需要个人访问令牌. 在这两种情况下，都可以使用令牌代替密码进行身份验证.

个人访问令牌在您定义的日期 UTC 午夜到期.

*   GitLab 每天在世界标准时间 01:00 AM 进行检查，以识别将在 7 天内到期的个人访问令牌. 这些令牌的所有者通过电子邮件通知.
*   在 GitLab Ultimate 中，管理员可以[限制个人访问令牌的寿命](../admin_area/settings/account_and_limit_settings.html#limiting-lifetime-of-personal-access-tokens-ultimate-only) .
*   在 GitLab Ultimate 中，管理员可以[切换个人访问令牌到期的执行](../admin_area/settings/account_and_limit_settings.html#optional-enforcement-of-personal-access-token-expiry-ultimate-only) .

有关如何使用个人访问令牌向 API 进行身份验证的示例，请参见[API 文档中](../../api/README.html#personalproject-access-tokens)的以下部分.

GitLab 还提供了[模拟令牌](../../api/README.html#impersonation-tokens) ，这些[令牌](../../api/README.html#impersonation-tokens)是管理员通过 API 创建的. 它们非常适合作为特定用户的自动身份验证.

## Creating a personal access token[](#creating-a-personal-access-token "Permalink")

您可以在 GitLab 个人资料中创建任意数量的个人访问令牌.

1.  登录到 GitLab.
2.  点击右上角的头像，然后选择**设置** .
3.  在" **用户设置"**菜单上，选择" **访问令牌"** .
4.  选择令牌的名称和可选的到期日期.
5.  选择[所需的范围](#limiting-scopes-of-a-personal-access-token) .
6.  单击**创建个人访问令牌**按钮.
7.  将个人访问令牌保存在安全的地方. 离开或刷新页面后，将无法再次访问它.

### Revoking a personal access token[](#revoking-a-personal-access-token "Permalink")

您可以随时单击" **活动个人访问令牌"**区域下的相应" **撤消"**按钮来撤消任何个人访问令牌.

### Token activity[](#token-activity "Permalink")

您可以从" **个人访问令牌"**页面**查看**上次使用**令牌的时间** . 令牌使用情况的更新每 24 小时固定一次. 对[API 资源](../../api/api_resources.html)和[GraphQL API 的](../../api/graphql/index.html)请求将更新令牌的用法.

## Limiting scopes of a personal access token[](#limiting-scopes-of-a-personal-access-token "Permalink")

可以使用一个或多个范围创建个人访问令牌，这些范围允许给定令牌可以执行各种操作. 下表描述了可用范围.

| Scope | 引入 | Description |
| --- | --- | --- |
| `read_user` | [GitLab 8.15](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5951) | 允许访问`/users`下的只读端点. 本质上，允许[用户 API](../../api/users.html)中的任何`GET`请求. |
| `api` | [GitLab 8.15](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5951) | 授予对 API 的完全读写访问权限，包括所有组和项目，容器注册表和程序包注册表. |
| `read_api` | [GitLab 12.10](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28944) | 授予对 API 的读取权限，包括所有组和项目，容器注册表和程序包注册表. |
| `read_registry` | [GitLab 9.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/11845) | 如果项目是私有的并且需要授权，则允许读取（拉出） [容器注册表](../packages/container_registry/index.html)图像. |
| `sudo` | [GitLab 10.2](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/14838) | 允许以系统中的任何用户身份执行 API 操作（如果经过身份验证的用户是管理员）. |
| `read_repository` | [GitLab 10.7](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/17894) | 允许通过`git clone`对存储库进行只读访问（拉）. |
| `write_repository` | [GitLab 11.11](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26021) | 允许通过`git clone`对存储库进行读写访问（拉，推）. 启用 2FA 时，通过 HTTP 访问 Git 存储库是必需的. |

## Programmatically creating a personal access token[](#programmatically-creating-a-personal-access-token "Permalink")

您可以以编程方式创建预定的个人访问令牌，以用于自动化或测试. 您将需要足够的访问权限才能为 GitLab 实例运行[Rails 控制台会话](../../administration/troubleshooting/debug.html#starting-a-rails-console-session) .

要使用用户名`automation-bot`创建属于用户的令牌，请在 Rails 控制台（ `sudo gitlab-rails console` ）中运行以下`sudo gitlab-rails console` ：

```
user = User.find_by_username('automation-bot')
token = user.personal_access_tokens.create(scopes: [:read_user, :read_repository], name: 'Automation token')
token.set_token('token-string-here123')
token.save! 
```

使用[GitLab Rails Runner](../../administration/troubleshooting/debug.html#using-the-rails-runner)可以将其简化为单行 shell 命令：

```
sudo gitlab-rails runner "token = User.find_by_username('automation-bot').personal_access_tokens.create(scopes: [:read_user, :read_repository], name: 'Automation token'); token.set_token('token-string-here123'); token.save!" 
```

**注意：**令牌字符串的长度必须为 20 个字符，否则将不会被识别为个人访问令牌.

有效范围的列表及其作用可以[在源代码中](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/auth.rb)找到.

## Programmatically revoking a personal access token[](#programmatically-revoking-a-personal-access-token "Permalink")

您可以通过编程方式撤消个人访问令牌. 您将需要足够的访问权限才能为 GitLab 实例运行[Rails 控制台会话](../../administration/troubleshooting/debug.html#starting-a-rails-console-session) .

要撤销已知令牌`token-string-here123` ，请在 Rails 控制台（ `sudo gitlab-rails console` ）中运行以下`sudo gitlab-rails console` ：

```
token = PersonalAccessToken.find_by_token('token-string-here123')
token.revoke! 
```

可以使用[GitLab Rails Runner](../../administration/troubleshooting/debug.html#using-the-rails-runner)将其[简化](../../administration/troubleshooting/debug.html#using-the-rails-runner)为单行 shell 命令：

```
sudo gitlab-rails runner "PersonalAccessToken.find_by_token('token-string-here123').revoke!" 
```