我一直在研究为 Web 应用程序设置登录名,让客户查看 S3 中托管的数据,发现 AWS Cognito 有一个托管的 Web UI [链接] 可以为我处理大部分身份验证流程,我面临的问题是我无法找到如何将 Web UI 的输出集成到我的应用程序中。 Cognito 中的大部分现有文档仅引用了如何使用各种 API 来创建您自己的 UI,这让我对我的问题的答案感到困惑。
是否有任何信息是在考虑 Cognito 托管 UI 的情况下创建的?
Amazon 表示您可以在几分钟内将经过身份验证的登录与 Cognito 集成,但我已经研究了几周但无法弄清楚。
原文由 Fyreye 发布,翻译遵循 CC BY-SA 4.0 许可协议
我也为此苦苦挣扎;我同意文档有点简单。
您提供的链接显示了您的 Cognito UI URL 可能的样子:
这个想法是你将你的用户发送到这个 URI,他们做他们的事情,然后他们用某种令牌或代码重定向回你。您可以通过单击左侧导航栏中的“域名”来检查您的域。
应用程序客户端设置和 OAuth 授权类型
首先,检查您的 App 客户端设置。您需要将回调 URL 列入白名单(Cognito 将重定向回的位置),并确保至少允许一个 OAuth Flow。
Cognito 应用程序客户端设置
“授权码授予”将返回一个授权码,然后您将其发送到
oauth2/token
端点以获得access_token、id_token和refresh_token。如果您有后端应用程序并想要刷新令牌,这是一个不错的选择。“隐式授权”是我在前端应用程序中使用的。它会将访问令牌和 ID 令牌直接返回到我的前端应用程序。
要使用隐式授权,请在您的 Cognito UI URL 中将
response_type=code
更改为response_type=token
。隐式授权示例
因此,如果您在成功验证后的重定向如下所示:
您只需从 URL 中剥离 id_token 并将其发送到 Cognito,并将您的用户池作为登录映射中的键。在Javascript中:
其中
idToken
是在重定向时返回给您的 ID 令牌。授权码授权类型
如果您改用授权码授予类型 (response_type=code),您的后端将需要调用
/oauth2/token
端点来交换令牌代码。该调用看起来像这样:然后你可以像上面那样把这个 id token 给 Cognito。
界面说明
当用户单击链接时,我的应用程序会在新选项卡中弹出 Cognito UI。当重定向返回到我的应用程序时,我使用
postMessage()
将令牌发送到父窗口,然后关闭新选项卡。我认为这是一种比较常见的模式。我还没有尝试过,但我猜想将 UI 渲染到 iframe 中是不允许的,以缓解点击劫持。 资源
我希望这至少有所帮助。祝你好运!