OAuth 2.0 提供安全的委托服务器资源访问权限,允许客户端应用程序代表资源所有者进行访问。OAuth 2 允许授权服务器在资源所有者或终端用户的批准下向第三方客户端发放访问令牌。

你可以通过向实例添加以下类型的 OAuth 2 应用程序,将极狐GitLab 用作 OAuth 2 身份认证提供者:

这些方法只在权限级别上有所不同。默认的回调 URL 是 SSL URL https://your-gitlab.example.com/users/auth/gitlab/callback。你可以使用非 SSL URL,但建议使用 SSL URL。

在向实例添加 OAuth 2 应用程序后,你可以使用 OAuth 2 来:

  • 使用户能够使用他们的 JihuLab.com 账户登录你的应用程序。
  • 设置 JihuLab.com 以验证你的极狐GitLab 实例。有关详细信息,请参阅将你的服务器与 JihuLab.com 集成

  • 创建应用程序后,外部服务可以使用 OAuth 2 API 管理访问令牌。

创建用户拥有的应用程序

要为你的用户创建新应用程序:

  1. 在左侧边栏中,选择你的头像。
  2. 选择 编辑资料
  3. 在左侧边栏中,选择 应用程序
  4. 选择 添加新应用程序
  5. 输入一个 名称重定向 URI
  6. 根据授权应用程序中定义的选择 OAuth 2 范围
  7. 重定向 URI 中,输入用户在授权极狐GitLab 后被发送到的 URL。
  8. 选择 保存应用程序。极狐GitLab 提供:

    • 应用程序 ID 字段中的 OAuth 2 客户端 ID。
    • 通过选择 复制密钥 字段中访问的 OAuth 2 客户端密钥。
    • 在极狐GitLab 15.9 及更高版本中提供的 更新密钥 功能。使用此功能为此应用程序生成并复制新的密钥。更新密钥会在凭据更新前阻止现有应用程序的正常运行。

创建群组拥有的应用程序

要为群组创建新应用程序:

  1. 转到所需的群组。
  2. 在左侧边栏中,选择 设置 > 应用程序
  3. 输入一个 名称重定向 URI
  4. 根据授权应用程序中定义的选择 OAuth 2 范围。
  5. 重定向 URI 中,输入用户在授权极狐GitLab 后被发送到的 URL。
  6. 选择 保存应用程序。极狐GitLab 提供:

    • 应用程序 ID 字段中的 OAuth 2 客户端 ID。
    • 通过选择 复制密钥 字段中访问的 OAuth 2 客户端密钥。
    • 在极狐GitLab 15.9 及更高版本中提供的 更新密钥 功能。使用此功能为此应用程序生成并复制新的密钥。更新密钥会在凭据更新前阻止现有应用程序的正常运行。

创建实例范围的应用程序

{{< details >}}

  • 等级:基础版,专业版,旗舰版
  • 提供:极狐GitLab 私有化部署

{{< /details >}}

要为你的极狐GitLab 实例创建应用程序:

  1. 在左侧边栏的底部,选择 管理员
  2. 选择 应用程序
  3. 选择 新建应用程序

管理员区域 创建应用程序时,将其标记为 受信任。此应用程序的用户授权步骤会被自动跳过。

查看所有授权的应用程序

{{< history >}}

  • 在极狐GitLab 16.4 中引入了 k8s_proxy功能标志 k8s_proxy_pat 默认启用。
  • 在极狐GitLab 16.5 中删除了功能标记 k8s_proxy_pat

{{< /history >}}

要查看你使用极狐GitLab 凭据授权的所有应用程序:

  1. 在左侧边栏中,选择你的头像。
  2. 选择 编辑资料,然后选择 应用程序
  3. 查看 授权的应用程序 部分。

极狐GitLab OAuth 2 应用程序支持范围,允许应用程序执行不同的操作。请参阅下表以获取所有可用范围。

范围 描述
api 授予对 API 的完全读/写访问权限,包括所有群组和项目、容器注册表、依赖代理和软件包注册表。
read_user 通过 /user API 端点授予对经过身份验证用户配置文件的只读访问权限,包括用户名、公共电子邮件和全名。还授予对 /users 下只读 API 端点的访问权限。
read_api 授予对 API 的读取访问权限,包括所有群组和项目、容器注册表和软件包注册表。
read_repository 授予使用 Git-over-HTTP 或存储库文件 API 对私有项目存储库的只读访问权限。
write_repository 授予使用 Git-over-HTTP(不使用 API)对私有项目存储库的读写访问权限。
read_registry 授予对私有项目容器注册表镜像的只读访问权限。
write_registry 授予对私有项目容器注册表镜像的只读访问权限。
sudo 授权在系统中以任何用户身份执行 API 操作,但必须以管理员用户身份进行身份验证。
openid 授予使用极狐GitLab 通过 OpenID Connect 进行身份验证的权限。还授予对用户配置文件和群组成员资格的只读访问权限。
profile 授予使用 OpenID Connect 对用户配置文件数据的只读访问权限。
email 授予使用 OpenID Connect 对用户主要电子邮件地址的只读访问权限。
create_runner 授予创建 runner 的权限。
manage_runner 授予管理 runner 的权限。
k8s_proxy 授权使用 Kubernetes 代理执行 Kubernetes API 调用。

你可以随时通过选择 撤销 来撤销任何访问权限。

访问令牌过期

{{< history >}}

  • 在极狐GitLab 15.10 中引入了对 expires_in 的数据库验证。如果你的极狐GitLab 实例在升级到 15.10 或更高版本时存在任何未设置 expires_in 的 OAuth 访问令牌,数据库迁移将会报错。

{{< /history >}}

{{< alert type=”warning” >}}

在极狐GitLab 15.0 中移除了选择不让访问令牌过期的功能。所有现有集成必须更新以支持访问令牌刷新。

{{< /alert >}}

访问令牌在两小时后过期。使用访问令牌的集成必须使用 refresh_token 属性生成新的令牌。即使在 access_token 本身过期后,刷新令牌也可以使用。有关如何刷新过期访问令牌的更多详细信息,请参阅 OAuth 2.0 令牌文档

此过期设置是在极狐GitLab 代码库中使用 access_token_expires_in 配置从 Doorkeeper 设置的,Doorkeeper 是提供极狐GitLab 作为 OAuth 提供者功能的库。过期设置不可配置。

当应用程序被删除时,与该应用程序相关的所有授权和令牌也会被删除。

哈希化的 OAuth 应用程序密钥

{{< history >}}

  • 在极狐GitLab 15.4 中引入,使用名为 hash_oauth_secrets功能标记。默认禁用。
  • 在极狐GitLab 15.8 中在 JihuLab.com 上启用。
  • 在极狐GitLab 15.9 中在极狐GitLab 私有化部署中启用。
  • 在极狐GitLab 15.10 中 GA。功能标记 hash_oauth_secrets 移除。

{{< /history >}}

默认情况下,极狐GitLab 将 OAuth 应用程序密钥以哈希格式存储在数据库中。这些密钥仅在创建 OAuth 应用程序后立即对用户可用。在较早版本的极狐GitLab 中,应用程序密钥以明文形式存储在数据库中。

在极狐GitLab 中使用 OAuth 2 的其他方式

你可以:

  • 使用 应用程序 API 创建和管理 OAuth 2 应用程序。
  • 启用用户使用第三方 OAuth 2 提供者登录极狐GitLab。有关更多信息,请参阅 OmniAuth 文档
  • 使用极狐GitLab 导入器结合 OAuth 2 访问存储库,而无需共享用户凭据到你的 JihuLab.com 账户。