

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 如何解决 AWS SDKs 和工具的 IAM 身份中心身份验证问题
<a name="understanding-sso"></a>



## 相关 IAM Identity Center 术语
<a name="ssoterms"></a>

以下术语可帮助您了解 AWS IAM Identity Center背后的流程和配置。对于其中一些身份验证概念， AWS SDK 文档 APIs 使用的名称与 IAM Identity Center 不同。知道这两个名字会很有帮助。

下表介绍了备用名称之间的关系。


| IAM Identity Center 名称 | SDK API 名称 | 说明 | 
| --- | --- | --- | 
| 身份中心  | sso  | 尽管已重命名 AWS 单点登录，但出于向后兼容目的，ssoAPI 命名空间仍将保留其原始名称。有关更多信息，请参阅 AWS IAM Identity Center 用户指南中的 [IAM Identity Center 重命名](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html#renamed)。 | 
| IAM Identity Center 控制台管理控制台 |   | 用于配置单点登录的控制台。 | 
| AWS 访问门户网址  |  | 您的 IAM Identity Center 账户独有的 URL，例如 https://xxx.awsapps.com/start。您使用您的 IAM Identity Center 登录凭证来登录此门户。 | 
| IAM Identity Center 访问门户会话  | 身份验证会话  | 向调用者提供持有者访问令牌。 | 
| 权限集会话  |   | 软件开发工具包内部用于进行调用的 IAM 会 AWS 服务 话。在非正式讨论中，您可能会看到它被错误地称为 “角色会话”。 | 
| 权限集凭证  | AWS 证书sigv4 凭证  | SDK 实际用于大多数 AWS 服务 调用（特别是所有 sigv4 AWS 服务 调用）的凭证。在非正式讨论中，您可能会看到它被错误地称为 “角色凭证”。 | 
| IAM Identity Center 凭证提供者  | SSO 凭证提供者  | 如何获取凭证，例如提供功能的类或模块。 | 

## 了解 SDK 凭据解析 AWS 服务
<a name="idccredres"></a>

IAM Identity Center API 将持有者令牌凭证交换为 sigv4 凭证。大多数 AWS 服务 都是 sigv4 APIs，但也有一些例外，比如 Amazon CodeWhisperer 和。 Amazon CodeCatalyst以下内容描述了通过 AWS IAM Identity Center支持大多数应用程序代码 AWS 服务 调用的凭证解析流程。

### 启动 AWS 访问门户会话
<a name="idccredres1"></a>
+ 使用您的凭证登录会话以开始该过程。
  + 使用 AWS Command Line Interface (AWS CLI) 中的`aws sso login`命令。如果您还没有活动会话，这将启动一个新的 IAM Identity Center 会话。
+ 启动新会话时，您将收到来自 IAM Identity Center 的刷新令牌和访问令牌。 AWS CLI 还会使用新的访问令牌和刷新令牌更新 SSO 缓存 JSON 文件，并使其可供使用。 SDKs
+ 如果您已经有一个活动会话，则该 AWS CLI 命令将重复使用现有会话，并且将在现有会话过期时过期。要了解如何设置 IAM Identity Center 会话[的时长，请参阅用户*指南*中的配置用户 AWS 访问门户会话](https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-user-session.html)的AWS IAM Identity Center 持续时间。
  + 最大会话时长已延长至 90 天，以减少频繁登录的需求。

### SDK 如何获取 AWS 服务 通话凭证
<a name="idccredres2"></a>

SDKs AWS 服务 当您为每个服务实例化客户端对象时，提供访问权限。将共享 AWS `config`文件的选定配置文件配置为 IAM Identity Center 凭证解析时，将使用 IAM Identity Center 来解析您的应用程序的证书。
+ 在创建客户端时，[凭证解析过程](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)将在运行时完成。

要 APIs 使用 IAM 身份中心单点登录检索 sigv4 的证书，软件开发工具包使用 IAM 身份中心访问令牌获取 IAM 会话。此 IAM 会话称为权限集会话，它通过担任 IAM 角色提供对软件开发工具包的 AWS 访问权限。
+  权限集会话持续时间与 IAM Identity Center 会话持续时间是分开设置的。
  + 要了解如何设置权限集会话持续时间，请参阅*AWS IAM Identity Center 用户指南*中的[设置会话持续时间](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtosessionduration.html)。
+  请注意，在大多数 S AWS DK API 文档中，权限集*AWS 凭据*也被称为*凭证和 sigv4 凭证*。

对软件开发工具包的 IAM Identity Center API [getRoleCredentials](https://docs.aws.amazon.com/singlesignon/latest/PortalAPIReference/API_GetRoleCredentials.html)的调用会返回权限集证书。软件开发工具包的客户端对象使用该代入的 IAM 角色来调用 AWS 服务，例如让 Amazon S3 列出您账户中的存储桶。在权限集会话到期之前，客户端对象可以使用这些权限集凭证继续操作。

### 会话过期和刷新
<a name="idccredres3"></a>

使用 [SSO 令牌提供商配置](feature-sso-credentials.md#sso-token-config) 时，将使用刷新令牌自动刷新从 IAM Identity Center 获取的每小时访问令牌。
+ 如果访问令牌在 SDK 尝试使用它时已过期，SDK 将使用刷新令牌来尝试获取新的访问令牌。IAM Identity Center 会将刷新令牌与您的 IAM Identity Center 访问门户会话持续时间进行比较。如果刷新令牌未过期，IAM Identity Center 将使用另一个访问令牌进行响应。
+ 此访问令牌可用于刷新现有客户端的权限集会话，也可以用于解析新客户端的凭证。

但是，如果 IAM Identity Center 访问门户会话已过期，则不会授予新的访问令牌。因此，无法更新权限集持续时间。只要现有客户端的缓存权限集会话时长超时，它就会过期（并且访问权限将丢失）。

在 IAM Identity Center 会话到期后，任何创建新客户端的代码都将无法通过身份验证。这是因为未缓存权限集凭证。在您拥有有效的访问令牌之前，您的代码将无法创建新客户端并完成凭证解析过程。

总而言之，当 SDK 需要新的权限集凭证时，SDK 会首先检查所有有效的现有凭证并使用这些凭证。无论凭证是针对新客户端，还是凭证已过期的现有客户端，这都适用。如果找不到凭证或凭证无效，则 SDK 会调用 IAM Identity Center API 来获取新凭证。要调用 API，它需要访问令牌。如果访问令牌已过期，SDK 会使用刷新令牌尝试从 IAM Identity Center 服务获取新的访问令牌。如果您的 IAM Identity Center 访问门户会话未过期，则会授予此令牌。