Skip to content

OAuth2 第三方登录 ​

注意

第三方登录会自动使用用户邮箱注册账号(邮箱相同将视为同一账号)

此账号和注册的账号相同, 也可以通过忘记密码设置密码

在第三方平台注册 OAuth2 ​

GitHub ​

  • 请先创建一个 OAuth App,然后获取 Client ID 和 Client Secret
  • 默认 GitHub 模板使用 https://api.github.com/user 作为用户信息接口,并读取返回 JSON 的 email 字段。GitHub 账号如果隐藏公开邮箱,该字段会是 null,登录会返回 [400]: 从 Oauth2 提供商获取用户邮箱失败。
  • 解决方式是在 GitHub 个人资料中设置公开邮箱,或改成能返回邮箱的接口/提供商;如果返回值不是标准邮箱,可以使用下方“邮箱格式转换”。

如果不想公开 GitHub 邮箱,可以改用 GitHub 邮箱列表接口:

字段值
User Info URLhttps://api.github.com/user/emails
User Email Key$[?(@.primary==true)].email
Scopeuser:email

GitHub 个人资料中选择了 Public email 时,可以继续使用默认的 https://api.github.com/user + email 配置;只把邮箱从 private 改成可见但没有选择公开邮箱时,/user 接口仍可能返回 email: null。

参考 Creating an OAuth App

Linux Do ​

  • 在 Linux Do Connect 创建应用获取 Client ID 和 Client Secret
  • Linux Do 返回的是用户 ID 而非邮箱,需要启用邮箱格式转换功能

Authentik ​

Admin 后台配置 OAuth2 ​

oauth2

配置字段说明 ​

字段说明
NameOAuth2 提供商名称,显示在登录页面
Client IDOAuth2 应用 ID
Client SecretOAuth2 应用密钥
Authorization URLOAuth2 授权端点
Access Token URL获取 Access Token 的端点
Access Token Params FormatToken 请求格式:json 或 urlencoded
User Info URL获取用户信息的端点
User Email Key用户信息中邮箱字段的 key,支持 JSONPath (如 $[0].email)
Redirect URLOAuth2 回调地址
ScopeOAuth2 权限范围

Redirect URL 必须和第三方平台 OAuth App 中配置的回调地址完全一致。前端默认回调路径为:

text
https://你的前端域名/user/oauth2/callback

如果你的站点使用语言前缀路由,也仍然建议在 OAuth 平台中配置无语言前缀的回调地址,避免不同语言路径导致回调不一致。

邮箱格式转换 ​

当 OAuth2 返回的不是标准邮箱格式时(如返回用户 ID),可以启用邮箱格式转换功能。

字段说明
Enable Email Format启用邮箱格式转换
Email Regex Pattern正则表达式,用于匹配原始值,使用捕获组 ()
Replace Template替换模板,使用 $1、$2 等引用捕获组

示例:

场景原始值正则表达式替换模板结果
ID 转邮箱12345^(.+)$[email protected][email protected]
换域名[email protected]^(.+)@old\.com$[email protected][email protected]
提取用户名[email protected]^(.+)@.*$[email protected][email protected]

邮件地址白名单 ​

启用后,只有指定域名的邮箱才能登录。

测试用户登录页面 ​

oauth2 login

基于 MIT 许可发布