|
|
# 个人访问令牌[](#个人访问令牌 "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!"
|
|
|
``` |
|
|
\ No newline at end of file |