我们如何将GitHub帐户用作AWS Cognito身份提供商?

时间:2017-06-06 18:26:23

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

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

我的应用程序是一个专注于开发人员的应用程序,所以除了上述身份提供商的帐户之外,我还想让用户使用他们的Github帐户注册/登录。这可能吗?

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

2 个答案:

答案 0 :(得分:7)

自从首次编写此答案以来,我实现并发布了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-Authorizationtoken,{ {3}}和jwks。在Cognito中配置OpenID Connect提供程序时,可以分别指定每个端点。这意味着可以通过实现这些端点来为github提供OpenID Connect。

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

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

    • 使用github身份验证网址: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)。顺便说一句,这就是没有开放源代码的垫片将OAuth2.0与OpenID connect封装在一起的原因-OpenID connect的主要贡献是通信用户数据的标准化方法-由于OAuth没有标准化的方法来实现此目的,编写特定于GitHub的自定义代码(或我们要用于联盟的任何其他OAuth唯一提供程序)。

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

我还没有实现,但是接下来的几天我会尝试一下,并且会进行更新。

更新:我现在已经实现了此方法,并且该方法可行。我将看到有关清理代码并将其开源的信息。

第二次更新: userinfo

答案 1 :(得分:3)

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