尝试使用 Cognito 向 Battle.net OIDC 进行身份验证时出现错误的 id_token 颁发者
Posted
技术标签:
【中文标题】尝试使用 Cognito 向 Battle.net OIDC 进行身份验证时出现错误的 id_token 颁发者【英文标题】:Bad id_token issuer when trying to authenticate with Battle.net OIDC with Cognito 【发布时间】:2020-01-27 07:05:11 【问题描述】:过去几天我一直在尝试设置 Cognito 以使用战网 OIDC。我相信我大部分时间都在那里。我可以看到使用 cognito 托管的 UI,它可以正确验证但随后失败,可能是试图检索令牌。
对 cognito 托管 UI 的第一个请求:
https://<removed>.auth.us-west-2.amazoncognito.com/oauth2/authorize?identity_provider=Blizzard&redirect_uri=https://<my-site-oauth-handler-removed>/oauth&response_type=CODE&client_id=<removed>&scope=openid
那么下一个请求是按预期向战网OIDC发出的:
https://us.battle.net/oauth/authorize?client_id=<removed>&redirect_uri=https%3A%2F%2F<removed>.auth.us-west-2.amazoncognito.com%2Foauth2%2Fidpresponse&scope=openid&response_type=code&state=<removed>
然后将代码传递到 cognito idpresponse:
https://<removed>.auth.us-west-2.amazoncognito.com/oauth2/idpresponse?code=<removed>&state=<removed>
此时,如果我的理解是正确的,cognito 应该尝试点击战网/oath/token
端点,然后将id_token 和access_token 返回到我的redirect_url。它是在点 cognito 而不是返回一个错误到我的网址:
https://<my-site-oauth-handler-removed>/oauth?error_description=Bad+id_token+issuer+oauth.battle.net&error=invalid_request
从缺乏战网 OIDC 的文档来看,我可能是少数尝试将战网 OIDC 与 Cognito 一起使用的人之一。他们的实现很可能是一个错误,但我尽量不得出这个结论。
我现在最好的猜测是我没有正确配置 Cognito 来发出令牌 POST 请求。 It needs to use Basic Authentication 带有 clientid:password 但我无法验证它是否正确执行此操作,因为它被抽象掉了。
无论如何,当我通过我的应用(使用放大打开托管 UI)发出请求时,它确实会返回,但会返回以下内容:
[ERROR] 51:05.25 OAuth - Error handling auth response. Error: Bad+id_token+issuer+oauth.battle.net
at OAuth.<anonymous> (OAuth.js:202)
at step (OAuth.js:52)
at Object.next (OAuth.js:33)
at OAuth.js:27
at tryCallTwo (core.js:45)
at doResolve (core.js:200)
at new Promise (core.js:66)
at __awaiter (OAuth.js:23)
at OAuth.handleAuthResponse (OAuth.js:181)
at AuthClass.<anonymous> (Auth.js:1632)
这是我所有相关的 Cognito 配置:
OIDC 提供商:
提供商名称:暴雪 客户端 ID:[已删除] 客户端密码:[已删除] 属性请求方法:POST 授权范围:openid 发行人:https://us.battle.net/oauth应用客户端:
姓名:[已删除] 应用客户端 ID:[已删除] 应用客户端密钥:(无密钥)应用客户端设置:
启用的身份提供者:暴雪 回调网址:https://[removed]/oauth退出网址:https://[removed]/oauth
允许的 OAuth 流:
授权码授予 隐式授权 允许的 OAuth 范围 电子邮件 openid aws.cognito.signin.user.admin 个人资料 (我已经尝试了这些变体,但似乎并没有改变结果)联合身份:
身份验证提供程序 开放ID us.battle.net/oauthIAM 身份提供者:
提供者名称:us.battle.net/oauth 提供者类型:OIDC 提供者网址:us.battle.net/oauth CA 指纹:[已删除] 观众:[我的战网客户端ID]我已经用尽了我自己的资源,并在这方面寻求任何指导。
谢谢!
【问题讨论】:
【参考方案1】:这是由于暴雪从其知名端点发布其令牌但将 iss
字段设置为 oauth.battle.net
导致 Cognito(或任何其他令牌验证)失败因此出现错误消息
Bad+id_token+issuer+oauth.battle.net
我向他们在 Discord 的 API 团队提出了这个问题,根据发送给开发人员的电子邮件,他们将在 11 月 25 日发布修复程序。
尊敬的社区开发者,
今年早些时候,我们引入了一个新的 OAuth 发现端点,该端点 实现 OpenID Connect 发现规范。我们想 在 从 oauth.battle.net 到发行者的 OpenID 授权流程 由众所周知的配置端点 JSON 响应返回。这 对一些 OAuth OIDC 客户端来说可能是一个潜在的重大变化 但它符合 OpenID 连接规范: https://openid.net/specs/openid-connect-core-1_0.html#IssuerIdentifier
您的 OAuth 客户端应用程序被识别为可能是 受此更改的影响。
我们计划在 2019 年 11 月 25 日发布此更改。
您可以采取以下步骤来确保您的 OpenID Connect 更改后客户端将继续工作:
导航到下面的知名配置端点之一 对应于您的客户端应用程序运行的区域,并且 检查“发行人”字段。
如果颁发者字段与为您的 OAuth OIDC 配置的颁发者匹配 客户端,那么您的客户端是兼容的并且您已经是兼容的 并且不需要进行任何更改。
如果来自知名配置端点的 issuer 字段是 请与您的客户端配置中设置的发行人不同 更改颁发者以匹配众所周知的配置端点。
如果您的客户端支持 OpenID 发现端点标准,您 可以将其配置为从众所周知的 配置端点。您的 OAuth 客户端应自行配置。
【讨论】:
以上是关于尝试使用 Cognito 向 Battle.net OIDC 进行身份验证时出现错误的 id_token 颁发者的主要内容,如果未能解决你的问题,请参考以下文章
AWS Cognito - 创建用户而不向他们发送验证电子邮件
AWS CloudFormation 脚本失败 - 不允许 Cognito 使用您的电子邮件身份
用于获取AWS Cognito用户池令牌的OAUTH2服务器?