che*_*hen 18 single-sign-on oauth-2.0 openid-connect amazon-cognito aws-cognito
通过阅读Cognito Identity Provider文档,我了解到它似乎提供了与Facebook/Google/Twitter作为身份提供商的开箱即用集成.
我的应用程序是一个以开发人员为中心的应用程序,因此我希望除了上述身份提供商的帐户之外,还允许用户使用他们的Github帐户进行注册/登录.那可能吗?
如果可能的话,我需要做多少额外的工作(比较开箱即用的Facebook/Google社交注册功能)?
Tim*_*nes 10
自从第一次写这个答案以来,我实现并发布了一个项目,为Cognito提供了一个与GitHub交流的包装器.它附带了SAM/cloudformation部署脚本,因此您可以创建一个非常容易提供包装器的CloudFormation堆栈.
因此,OpenID Connect构建于OAuth2.0之上.这是一个扩展 - 在OpenID Connect中,OAuth端点(包含一个或两个扩展或更改)以及一些新端点.
通过阅读Cognito文档以及OpenID Connect和OAuth2.0规范的相关内容,我的理解是Cognito 仅使用四个OpenID端点 - 授权,令牌,用户信息和jwks.在Cognito中配置OpenID Connect提供程序时,可以单独指定每个端点.这意味着可以通过实现这些端点为github提供OpenID Connect.
这是一个粗略的实施计划:
授权:在规范中,这看起来与OAuth2.0端点相同(加上一些我认为与使用github作为身份提供者无关的其他参数).我想你可以:
使用github Auth URL: https://github.com/login/oauth/authorize
将您的GitHub OAuth应用程序设置为重定向到 https://<your_cognito_domain>/oauth2/idpresponse
对于其他端点,您必须自己滚动它们:
令牌:这用于获取访问权限和ID令牌 - 使用code授权回调返回的.它看起来与OAuth2.0端点相同,但也返回一个idToken.看起来可以创建一个实现,它通过codeto github的令牌端点(https://github.com/login/oauth/access_token)来获取accessToken,然后idToken使用您自己的私钥生成一个签名.
UserInfo:这在OAuth2.0中根本不存在,但我认为可以用/usergithub端点的请求填充大部分内容(因为此时请求包含经过身份验证的请求access_token).顺便说一句,这就是没有开源填充程序用OpenID连接包装OAuth2.0的原因 - OpenID connect的主要贡献是一种标准化的用户数据通信方式 - 而且由于OAuth没有标准化的方法来实现这一点,我们有编写一个特定于GitHub的自定义的(或者我们想要用于联合的任何其他仅OAuth提供者).
JWKS:这是包含公钥的JSON Web Key Set文档,可用于验证令牌端点生成的令牌.它可能是一个平面文件.
我还没有实现这个,但我将在接下来的几天内进行更新并进行更新.
更新:我现在已经实现了这个,并且该方法有效.我会看到清理我的代码并开源.
第二次更新: 我在这里开源项目.
小智 2
不幸的是这是不可能的。Cognito 联合身份可以支持任何 OIDC 身份提供商,但 OAuth2.0 规范没有提供这种灵活性,因此没有简单的方法可以实现这一点,除非我们添加对 Github 的特殊支持。
| 归档时间: |
|
| 查看次数: |
1950 次 |
| 最近记录: |