企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Personal access tokens > 原文:[https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) * [Creating a personal access token](#creating-a-personal-access-token) * [Revoking a personal access token](#revoking-a-personal-access-token) * [Token activity](#token-activity) * [Limiting scopes of a personal access token](#limiting-scopes-of-a-personal-access-token) * [Programmatically creating a personal access token](#programmatically-creating-a-personal-access-token) * [Programmatically revoking a personal access token](#programmatically-revoking-a-personal-access-token) # Personal access tokens[](#personal-access-tokens "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!" ```