通过阅读Cognito Identity Provider document,我了解它似乎提供了与Facebook / Google / Twitter作为身份提供商的开箱即用集成。
我的应用程序是一个专注于开发人员的应用程序,所以除了上述身份提供商的帐户之外,我还想让用户使用他们的Github帐户注册/登录。这可能吗?
如果可能的话,我需要做多少额外工作(比较开箱即用的Facebook / Google社交注册功能)?
答案 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 Connect和OAuth2.0规范的相关内容,我的理解是Cognito only uses four of the OpenID endpoints-Authorization,token,{ {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添加特殊支持,否则没有简单的方法可以实现这一点。