首页 > 解决方案 > 尝试使用 Cognito 向 Battle.net OIDC 进行身份验证时出现错误的 id_token 颁发者

问题描述

过去几天我一直在尝试设置 Cognito 以使用 Battle.net 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 请求。它需要使用带有 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 提供商:

应用客户端:

应用客户端设置:

联合身份:

IAM 身份提供商:

我已经用尽了自己的资源,并要求对此提供任何指导。

谢谢!

标签: oauthopenidamazon-cognitoaws-amplifyopenid-connect

解决方案


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

Bad+id_token+issuer+oauth.battle.net

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

尊敬的社区开发者,

今年早些时候,我们引入了一个新的 OAuth 发现端点,它实现了 OpenID Connect 发现规范。我们希望在从 oauth.battle.net 到由众所周知的配置端点 JSON 响应返回的颁发者的 OpenID 授权流期间部署对 id_token 的颁发者字段 iss 的更改。这可能是对一些 OAuth OIDC 客户端的潜在重大更改,但它符合 OpenID 连接规范: https ://openid.net/specs/openid-connect-core-1_0.html#IssuerIdentifier

您的 OAuth 客户端应用程序被确定为可能受此更改影响的应用程序。

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

以下是您可以采取的步骤,以确保您的 OpenID Connect 客户端在更改后继续工作:

导航到下面与您的客户端应用程序运行的区域相对应的众所周知的配置端点之一,并检查“颁发者”字段。

如果颁发者字段与为您的 OAuth OIDC 客户端配置的颁发者匹配,那么您的客户端是兼容的,并且您已经合规并且不需要进行任何更改。

如果来自知名配置端点的颁发者字段与您的客户端配置中设置的颁发者不同,请更改颁发者以匹配知名配置端点。

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


推荐阅读