Personal access tokens

原文:https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html

Personal access tokens

版本历史

If you’re unable to use OAuth2, you can use a personal access token to authenticate with the GitLab API.

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

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

有关如何使用个人访问令牌向 API 进行身份验证的示例,请参见API 文档中的以下部分.

GitLab 还提供了模拟令牌 ,这些令牌是管理员通过 API 创建的. 它们非常适合作为特定用户的自动身份验证.

Creating a personal access token

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

  1. 登录到 GitLab.
  2. 点击右上角的头像,然后选择设置 .
  3. 在” 用户设置”菜单上,选择” 访问令牌” .
  4. 选择令牌的名称和可选的到期日期.
  5. 选择所需的范围 .
  6. 单击创建个人访问令牌按钮.
  7. 将个人访问令牌保存在安全的地方. 离开或刷新页面后,将无法再次访问它.

Revoking a personal access token

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

Token activity

您可以从” 个人访问令牌”页面查看上次使用令牌的时间 . 令牌使用情况的更新每 24 小时固定一次. 对API 资源GraphQL API 的请求将更新令牌的用法.

Limiting scopes of a personal access token

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

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

Programmatically creating a personal access token

您可以以编程方式创建预定的个人访问令牌,以用于自动化或测试. 您将需要足够的访问权限才能为 GitLab 实例运行Rails 控制台会话 .

要使用用户名automation-bot创建属于用户的令牌,请在 Rails 控制台( sudo gitlab-rails console )中运行以下sudo gitlab-rails console

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

使用GitLab Rails Runner可以将其简化为单行 shell 命令:

  1. 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 个字符,否则将不会被识别为个人访问令牌.

有效范围的列表及其作用可以在源代码中找到.

Programmatically revoking a personal access token

您可以通过编程方式撤消个人访问令牌. 您将需要足够的访问权限才能为 GitLab 实例运行Rails 控制台会话 .

要撤销已知令牌token-string-here123 ,请在 Rails 控制台( sudo gitlab-rails console )中运行以下sudo gitlab-rails console

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

可以使用GitLab Rails Runner将其简化为单行 shell 命令:

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