Oauth 尝试使用Cognito通过Battle.net OIDC进行身份验证时出现错误的id_令牌颁发者

Oauth 尝试使用Cognito通过Battle.net OIDC进行身份验证时出现错误的id_令牌颁发者,oauth,openid,amazon-cognito,aws-amplify,openid-connect,Oauth,Openid,Amazon Cognito,Aws Amplify,Openid Connect,过去几天我一直在尝试设置Cognito以使用Battle.NETOIDC。我相信我已经走到了那里。我可以看到,使用cognito托管的UI,它可以正确地进行身份验证,但随后失败,可能是试图检索令牌 对cognito托管UI的第一个请求: https://.auth.us-west-2.amazoncognito.com/oauth2/authorize?identity_provider=Blizzard&redirect_uri=https:///oauth&response_type=COD

过去几天我一直在尝试设置Cognito以使用Battle.NETOIDC。我相信我已经走到了那里。我可以看到,使用cognito托管的UI,它可以正确地进行身份验证,但随后失败,可能是试图检索令牌

对cognito托管UI的第一个请求:

https://.auth.us-west-2.amazoncognito.com/oauth2/authorize?identity_provider=Blizzard&redirect_uri=https:///oauth&response_type=CODE&client_id=&scope=openid

然后,下一个请求是按预期发送到Battle.net OIDC:

https://us.battle.net/oauth/authorize?client_id=&redirect_uri=https%3A%2F%2F.auth.us-west-2.amazoncignito.com%2fauth2%2fiddresponse&scope=openid&response\u type=code&state=

然后将代码传递到cognito IDP响应:

https://.auth.us-west-2.amazoncognito.com/oauth2/idpresponse?code=&state=

此时,如果我的理解正确,cognito应该尝试点击battle.net
/誓言/token
端点,然后将id\u令牌和access\u令牌返回到我的重定向\u url。它在cognito处返回一个错误到我的url:

https:///oauth?error_description=Bad+id\u令牌+颁发者+oauth.battle.net&error=无效\u请求

从缺少Battle.net OIDC文档的情况来看,我可能是尝试将Battle.net OIDC与Cognito结合使用的少数人之一。这很可能是他们的实现中的一个bug,但我不想马上得出这个结论

我现在最好的猜测是,我没有正确配置Cognito来发出令牌POST请求。使用clientid:password,但我无法验证它是否正确,因为它被抽象掉了

无论如何,当我通过我的应用程序发出请求时(使用amplify打开托管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)
[ERROR]51:05.25 OAuth-错误处理身份验证响应。错误:错误+id\u令牌+颁发者+oauth.battle.net
在OAuth

应用程序客户端:

  • 姓名:[已删除]
  • 应用程序客户端id:[已删除]
  • 应用程序客户端密钥:(无密钥)
应用程序客户端设置:

  • 启用的身份提供程序:暴雪
  • 回调URL:
  • 注销URL:

  • 允许的OAuth流:

    • 授权码授予
    • 隐性补助
  • 允许的OAuth作用域
    • 电子邮件
    • openid
    • aws.cognito.signin.user.admin
    • 侧面图
  • (我已经尝试了这些方法的每一种变体,但似乎没有改变结果)
联合身份:

  • 身份验证提供者
    • OpenID
      • us.battle.net/oauth
IAM身份提供者:

  • 提供商名称:us.battle.net/oauth
  • 提供程序类型:OIDC
  • 提供商URL:us.battle.net/oauth
  • CA指纹:[已删除]
  • 观众:[我的战网客户端id]
我已经用尽了我自己的资源,并要求任何有关这方面的指导


谢谢

这是由于暴雪从其知名端点发出令牌,但将
iss
字段设置为
oauth.battle.net
,导致Cognito(或任何其他令牌验证)失败,因此出现错误消息

Bad+id\u令牌+发卡机构+oauth.battle.net

我在Discord中向他们的API团队提出了这一点,根据发送给开发人员的电子邮件,他们将在11月25日发布一个修复程序

亲爱的社区开发者:

今年早些时候,我们引入了一个新的OAuth发现端点 实现OpenID连接发现规范。我们想要 将更改部署到id_令牌的iss字段 OpenID授权从oauth.battle.net流向 由众所周知的配置端点JSON响应返回。这 对某些OAuth OIDC客户端来说,这可能是一个突破性的改变 但它符合OpenID connect规范:

您的OAuth客户端应用程序被标识为 受这种变化的影响

我们计划于2019年11月25日发布此更改

以下是确保OpenID连接的步骤 更改后,客户将继续工作:

导航到其中一个已知的配置终结点,在该终结点下方 对应于客户端应用程序运行的区域,并且 检查“颁发者”字段

如果issuer字段与为OAuth OIDC配置的issuer匹配 客户端然后您的客户端是兼容的,并且您已经是兼容的 不需要做任何改变

如果来自已知配置终结点的issuer字段为 请与客户端配置中设置的发卡机构不同 更改颁发者以匹配已知的配置终结点

如果您的客户端支持OpenID发现端点标准,则 可以将其配置为从已知数据库读取所有必要的设置 配置端点。您的OAuth客户端应该自行配置