【问题标题】:How could we use GitHub account as an AWS Cognito Identity provider?我们如何使用 GitHub 帐户作为 AWS Cognito 身份提供商?
【发布时间】:2017-11-07 21:34:35
【问题描述】:

通过阅读Cognito Identity Provider document,我了解到它似乎提供了与 Facebook / Google / Twitter 作为身份提供者的开箱即用集成。

我的应用程序是一个以开发人员为中心的应用程序,因此我希望除了上述身份提供者的帐户之外,我还希望用户能够使用他们的 Github 帐户注册/登录。这可能吗?

如果可能,我需要做多少额外的工作(比较开箱即用的 Facebook/Google 社交注册功能)?

【问题讨论】:

    标签: oauth-2.0 single-sign-on amazon-cognito openid-connect aws-cognito


    【解决方案1】:

    自从第一次写这个答案以来,我实现并发布了一个project that provides a wrapper for Cognito to talk to GitHub。它带有一个 SAM/cloudformation 部署脚本,因此您可以非常轻松地创建一个提供包装器的 CloudFormation 堆栈。


    因此,OpenID Connect 建立在 OAuth2.0 之上。这是一个扩展 - 在 OpenID Connect 中,OAuth 端点(带有一两个扩展或更改)以及一些新端点。

    通过阅读 Cognito 文档以及 OpenID ConnectOAuth2.0 规范的相关位,我的理解是 Cognito only uses four of the OpenID endpoints - Authorizationtokenuserinfo 和 jwks。在 Cognito 中配置 OpenID Connect 提供程序时,您可以单独指定每个端点。这意味着可以通过实现这些端点为 github 提供 OpenID Connect。

    这是一个粗略的实施计划:

    • 授权:在规范中,这看起来与 OAuth2.0 端点相同(加上一些我认为与使用 github 作为身份提供者无关的附加参数)。我想你可以:

      • 使用 github 验证 URL:https://github.com/login/oauth/authorize

      • 将您的 GitHub OAuth 应用设置为重定向到 https://<your_cognito_domain>/oauth2/idpresponse

    对于其他端点,您必须自己滚动它们:

    • 令牌:这用于获取访问和 ID 令牌 - 使用授权回调返回的 code。它看起来与 OAuth2.0 端点相同,但也返回一个 idToken。看起来可以实现通过code 到 github 的令牌端点 (https://github.com/login/oauth/access_token) 以获取accessToken,然后生成一个idToken,使用您自己的私钥签名。

    • UserInfo:这在 OAuth2.0 中根本不存在,但我认为大部分内容都可以用对/user github 端点的请求来填充(因为此时该请求包含经过身份验证的access_token)。顺便说一句,这就是没有开源 shim 将 OAuth2.0 与 OpenID 连接包装在一起的原因——OpenID 连接的主要贡献是一种标准化的用户数据通信方式——而且由于 OAuth 没有标准化的方式来做到这一点,我们有为 GitHub(或我们想用于联合的任何其他仅 OAuth 提供程序)编写一个自定义的。

    • JWKS:这是 JSON Web 密钥集文档,其中包含可用于验证令牌端点生成的令牌的公钥。它可以是一个平面文件。

    我已经实现了上述方法,并且该方法有效。 I open-sourced the project here.

    【讨论】:

    • 这仍然是通过 Github 进行身份验证的唯一方法吗?
    • @SimonForsberg 该实现似乎适用于带有 lambda 的 API 网关身份验证,而不是适用于 Cognito 的 OIDC。除非我遗漏了什么,否则你不能用它来解决问题中的问题。
    • 必须说,很棒的图书馆。谢谢
    【解决方案2】:

    很遗憾,这是不可能的。 Cognito Federated Identities 可以支持任何 OIDC 身份提供者,但 OAuth2.0 规范没有提供这种灵活性,因此除非我们添加对 Github 的特殊支持,否则没有简单的方法来实现这一点。

    【讨论】:

    • “除非我们添加...”中的我们是指谁? AWS Cognito 团队还是我是开发人员?
    • @patanjal 根据他的个人资料,他是 AWS Cognito 的开发人员。有复杂的方法吗?
    • 这条消息已经存在一年了。有更新吗?您认为可以将 Github 登录包装到自定义 IDP 中吗?
    • 这里的另一个答案似乎表明这个服务器是错误的。
    猜你喜欢
    • 2020-07-06
    • 2020-04-25
    • 2022-07-28
    • 1970-01-01
    • 2020-08-14
    • 2018-11-06
    • 2018-08-29
    • 2017-01-05
    • 2018-10-08
    相关资源
    最近更新 更多