我正在为 Cognito 用户池设置 OIDC 提供商。我使用的 open id connect 服务是 Paypal。在 paypal 发布代码并重定向到 cognito 的 /oauth2/idpresponse
端点的步骤,之后 cognito 应该交换访问 token 的代码,我收到 “异常处理授权代码”
错误。如您所见,错误消息的描述性不强。
我不知道我做错了什么。我确实正确设置了 open id connect。在 cognito 等中设置客户端设置。
这些是我用于 openid 连接的端点:
https://www.sandbox.paypal.com/signin/authorize
https://api.sandbox.paypal.com/v1/identity/openidconnect/tokenservice
https://api.sandbox.paypal.com/v1/oauth2/token/userinfo
https://api.sandbox.paypal.com/v1/oauth2/certs
在应用程序客户端设置中,我启用了授权代码授权流程和隐式流程。我有自定义域设置。我提供了 Paypal 客户 ID 和密码
我的猜测是,如果我能够以某种方式调试 idpresponse 端点,我应该能够解决问题。有什么办法吗?也许是 cloudwatch?
最佳答案
我不知道如何调试 Cognito 的端点,但我遇到了同样的问题并通过执行以下操作修复了它:
- 转到您在 AWS 中的用户池。
- 在Federation 下的侧边导航中,选择Attribute mapping。
- 点击您遇到问题的身份提供商的标签(在我的例子中是 Google)。
应该有三列,捕获、Google 属性 和用户池属性。确保在 Capture 列中选中的所有属性都映射到 User pool attribute 列中的一个属性。
更新:
提交此答案后,我意识到默认情况下,Capture 列中的复选框未选中。 如果您在用户池的属性部分将任何属性标记为必需,则需要将这些属性映射到外部身份提供商提供的属性。
例如,我在我的用户池设置中将电子邮件 标记为必需属性。因此,当我将 Google 添加为身份提供者时,我必须转到Federation->Attribute mapping,单击 Google 选项卡,选中 Capture 列中的框在 email 旁边,然后从 User pool attribute 列的下拉框中选择 Email。
执行这些步骤后,登录工作流程对我有用。
我的猜测是身份验证流程在 Cognito 和您的身份提供者之间工作得很好,但 Cognito 不知道如何将从身份提供者返回的属性映射到您在用户池中设置的属性(在 需要哪些标准属性 部分下的常规设置->属性)。
关于amazon-web-services - 如何调试 Cognito 的 idpresponse 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56606217/