如何从 GitHub 的 API 获取 OpenID Connect ID 令牌来实现社交登录?

Nat*_*les 12 github github-api openid-connect

背景

我正在尝试使用 GitHub 帐户和 OpenID Connect 实现社交登录,但我无法弄清楚我应该使用哪些 GitHub 端点:

  1. 将用户重定向到 和
  2. 将授权码发布到

...取回 ID 令牌,或者如果我已经拥有正确的端点但参数错误。

我一直在遵循/调整本指南来使用 OpenID Connect(使用 Google 作为身份提供者而不是 GitHub)实现社交登录,并参考“OAuth 2.0 Web 应用程序流程” GitHub 文档页面来尝试了解我需要如何调整该指南以使用 GitHub(即我需要使用哪些 GitHub 端点和参数)。

我的问题

当我将授权代码发布到https://github.com/login/oauth/access_token(GitHub 文档中指定的 URL)时,我取回访问令牌和刷新令牌,但没有 ID 令牌。我怀疑这是因为 GitHub 文档页面旨在用于实现普通(非 OpenID Connect)OAuth 2.0 流程。

我尝试过的

我做了很多谷歌搜索,发现PragmaticWebSecurity.com 上的这些 2019 年幻灯片说我需要最初将用户重定向到不同的端点(https://github.com/openid-connect/auth而不是https://github.com/login/oauth/authorize,请参阅幻灯片 29),但当我尝试这样做时,我收到 404 错误来自 GitHub。我尝试向创建这些幻灯片的人发送电子邮件,询问端点是否已更改,但他没有回复我。

以下是我对问题答案的猜测:

  1. GitHub 不支持 OpenID Connect / 无法取回 ID 令牌;我只需使用访问令牌来查询 API,即可获取我需要的有关用户的任何信息。
    • 这可以解释为什么我在 GitHub 的文档中找不到任何有关使用 OpenID Connect 进行社交登录的内容。
  2. 我有正确的端点 ( https://github.com/login/oauth/access_token),但缺少一些取回 ID 令牌所需的参数。
  3. 我有错误的端点。

Nat*_*les 7

我联系了 GitHub 支持并得到了官方回复:他们的 API 不支持 OpenID Connect 进行社交登录。

以下是他们的完整回应:

嗨内森,

感谢您伸出援手!

GitHub OAuth 流程当前不支持 OpenID 连接功能。您需要使用 OAuth 2.0

https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps

问候,

Oluwaseun GitHub 支持

因此,在他们添加对 OpenID Connect 的支持之前,您可以参考我写的关于如何使用 OAuth 2.0 实现社交登录的文章:

如何使用 GitHub 帐户实现社交登录?