如何解决 AWS STS AssumeRoleWithWebIdentity API 调用错误“InvalidIdentityToken”?

上次更新日期:2022 年 5 月 18 日

AWS Security Token Service(AWS STS)API 调用 AssumeRoleWithWebIdentity 失败,错误类似于以下内容:

“An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation.Couldn't retrieve verification key from your identity provider.(调用 AssumeRoleWithWebIdentity 操作时出错(InvalidIdentityToken)。无法从您的身份提供商处检索验证密钥。)”

简短描述

在以下情况下,可能会发生此错误:

  • 无法从公共互联网访问身份提供商(IdP)的 .well_known URL 和 jwks_uri。
  • 自定义防火墙正在阻止请求。
  • IdP 发出的到达 AWS STS 终端节点的 API 请求延迟超过 5 秒。

注意:此错误不会记录在 AWS CloudTrail 事件历史记录中,因为它发生在客户端。

解决方法

1.    验证身份提供商(IdP)的 .well_known URL 和 jwks_uri 是否可公开访问。这可以通过浏览器、Windows 命令或 Linux 命令进行检查。

执行以下任意一项操作:

在浏览器中导航到以下链接以检查访问权限:

https://<base_server_url>/.well-known/openid-configuration 

https://<base_server_url>/.well-known/jwks.json

-或者-

运行以下命令:

Windows:

wget https://<base_server_url>/.well-known/openid-configuration
wget https://<base_server_url>/.well-known/jwks.json

Linux:

curl https://<base_server_url>/.well-known/openid-configuration
curl https://<base_server_url>/.well-known/jwks.json

注意:请检查请求响应中的“200”状态码,以确认链接是否可访问。

2.    如果无法访问 IdP 的 .well_known URL 和 jwks_uri,请检查防火墙设置以确认这些域不在拒绝列表中。

根据防火墙的当前配置,可能需要将域添加到允许列表中。

如果无法访问防火墙设置,请将浏览器与来自不同网络的设备(例如手机)配合使用。按照步骤 1 中的说明检查浏览器的访问权限。如果 Web 请求成功,则表示该请求已被防火墙阻止。

如果发出 AssumeRoleWithWebIdentity API 调用的服务器是 Amazon Elastic Compute Cloud(Amazon EC2)实例,请确保配置设置正确。有关说明,请参阅为什么我无法连接到托管在我的 EC2 实例上的网站?

3.    检查整个操作的延迟。

操作的总延迟包括:

  • 来自 STS 的请求/响应时间
  • 来自 IdP 的请求/响应时间

最大限度减少 AWS STS 延迟

使用 AWS STS 服务的区域终端节点而不是全球终端节点。这将验证请求是否被路由到地理位置最近的服务器,以最大限度地减少延迟。有关更多信息,请参阅编写代码以使用 AWS STS 区域

注意:对于 AWS SDK,请求的目标终端节点由 AWS 区域参数路由,该参数在 sts_regional_endpoint 配置中进行调用。

评估 IdP 延迟

IdP 负责向 STS 终端节点发出请求。必须在 IdP 日志中分析 IdP 的传出数据包,以检查对 STS 终端节点的请求是否耗时过长。

注意:如果从 IdP 向 STS 终端节点发出请求的时间超过 5 秒,则请求可能会超时并失败。您可以联系您的身份提供商请求提高地理可用性,以减少此 API 调用的延迟。

4.    (可选)使用指数回退。

使用指数回退可以使错误响应的重试间隔时间逐渐延长。AssumeRoleWithWebIdentity API 依赖于从身份提供商(IdP)检索信息。大多数 IdP 都有 API 限制以避免节流错误,而且 API 调用可能无法从 IdP 获取所需的令牌。实现最大延迟间隔和最大重试次数。有关更多信息,请参阅 AWS 中的错误重试和指数回退


这篇文章对您有帮助吗?


您是否需要账单或技术支持?