使用 GitLab 的 OAuth2 认证服务

时间:2022-12-19 21:24:36

原文地址

本文档讲述如何使用 GitLab 作为 OAuth 认证服务提供商,以通过 GitLab 的 OAuth 认证登录其他服务(例如持续集成工具 Drone)。

如果想使用其他 OAuth 身份验证服务提供商(例如 GitHub、Facebook 等)登录 GitLab,请参阅 OAuth2 客户端文档

OAuth 简介

OAuth 代表资源所有者向客户端应用程序提供对服务器资源的“安全委派访问”。实际上,OAuth 允许授权服务器在获得资源所有者或最终用户的批准后向第三方客户端颁发访问令牌。

OAuth 主要用作单一登录服务(SSO),但也可以在此功能中找到许多不同的用途。例如,可以允许用户使用他们的 GitLab.com 帐户登录你的应用程序,或者可以使用 GitLab.com 对你的 GitLab 实例进行身份验证(请参阅 GitLab OmniAuth)。

GitLab Importer 功能还使用 OAuth 协议访问存储库,无需将用户凭据共享到您的 GitLab.com 帐户。

GitLab 支持两种向实例添加新的 OAuth2 应用程序的方式。你可以将应用程序添加为常规用户,也可以将其添加到管理员区域。这意味着 GitLab 可以具有实例范围和用户范围的应用程序。除了它们设置的不同权限级别(用户/管理员)之外,它们之间没有区别。默认回调网址是 http://your-gitlab.example.com/users/auth/gitlab/callback,例如 https://gitlab.kikakika.com/users/auth/gitlab/callback

通过“Settings”添加 application

点击右上角的用户头像后,点击 Settings 进入设置页面,然后点击 Applications 开始创建 application。
使用 GitLab 的 OAuth2 认证服务
使用 GitLab 的 OAuth2 认证服务
使用 GitLab 的 OAuth2 认证服务
在创建 application 的表单中,输入任意一个名称,并确保正确设置重定向 URI(用户在用 GitLab 授权后跳转到的 URL)。

选择合适的“Scopes”。

  • api:访问经过身份验证的用户 API。以用户身份完全访问 GitLab,包括对其所有组和项目的读/写。
  • read_user:阅读经过验证的用户的个人信息。以只读方式访问用户的个人资料信息,如用户名、公共电子邮件和全名。
  • sudo:以系统中的任何用户身份执行 API 操作(如果经过身份验证的用户是 admin)。
  • read_repository:读仓库。
  • openid:使用 OpenID Connect 进行身份验证。使用 GitLab 进行身份验证的能力以及对用户个人资料信息和组成员身份的只读访问权限。

点击提交时,将获得 application ID 和 application secret,然后可以将其与连接到 GitLab 的应用程序一起使用。

管理区域(admin area )中的 OAuth 应用程序

可以在管理区域创建不属于特定用户的应用程序。
使用 GitLab 的 OAuth2 认证服务
还可以通过管理区域将应用​​程序标记为可信,这样的应用程序会自动跳过用户授权步骤。

你授权使用你的 GitLab 凭证的每个应用程序都将显示在 Settings > Applications 下的“Authorized applications”部分。

Authorized_applications

GitLab 的 OAuth 应用程序支持范围(scopes),用来设置应用程序可以执行的操作。目前支持的范围有:apiread_usersudoread_repositoryopenid
使用 GitLab 的 OAuth2 认证服务
可以随时通过点击 Revoke 来撤消任何访问权限。