

 适用于 .NET 的 AWS SDK V3 已进入维护模式。

我们建议您迁移到 [适用于 .NET 的 AWS SDK V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html)。有关如何迁移的更多详细信息和信息，请参阅我们的[维护模式公告](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)。

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

# 使用配置 SDK 身份验证 AWS
<a name="creds-idc"></a>

使用开发 AWS 时，您必须确定您的代码是如何进行身份验证的。 AWS 服务您可以通过不同的方式配置对 AWS 资源的编程访问权限，具体取决于环境和可用的 AWS 访问权限。

要查看 SDK 的各种身份验证方法，请参阅《工具参考指南》[和《*工具参考指南》中的身份验证AWS SDKs 和*访问权限](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)。

本主题假设新用户正在本地开发，雇主未向其提供身份验证方法，并将使用该用户 AWS IAM Identity Center 来获取临时证书。如果您的环境与这些假设不符，则本主题中的某些信息可能不适用于您，或者某些信息可能已经提供给您。

 配置此环境需要几个步骤，总结如下：

1. [使用控制台凭据登录](#login-con-creds)

1. [启用和配置 IAM Identity Center](#idc-config-sso)

1. [将开发工具包配置为使用 IAM Identity Center。](#idc-config-sdk)

1. [启动 AWS 访问门户会话](#idc-start-portal)

## 使用控制台凭据登录
<a name="login-con-creds"></a>

您可以使用现有的 AWS 管理控制台登录凭据以编程方式访问 AWS 服务。在基于浏览器的身份验证流程之后， AWS 生成可跨本地开发工具（例如 CL AWS I AWS Tools for PowerShell 和适用于.NET v3 的 AWS SDK）使用的临时证书。

通过此流程，您可以使用在初始账户设置期间创建的根证书、IAM 用户或身份提供商提供的联合身份以及 AWS CLI 进行身份验证，或者 AWS Tools for PowerShell 自动为您管理临时证书。这种方法无需在本地存储长期证书，从而增强了安全性。

当您从 AWS CLI 运行`aws login`命令时，您可以从活动控制台会话中进行选择，也可以通过基于浏览器的身份验证流程登录，这将自动生成临时证书。临时凭证令牌将在 15 分钟后过期，但是适用于.NET 的 AWS SDK for v3 会在您请求期间根据需要自动刷新令牌。

**警告**  
.NET 框架目标不支持此功能。

**重要**  
如果您使用控制台凭据进行身份验证，则您的应用程序必须引用以下 NuGet 软件包，这样 AWS 登录解析才能起作用：  
**AWSSDK. 登录**
未能引用这些程序包将导致运行时系统异常。
+ [使用 AWS CLI 使用控制台凭据登录。](https://docs.aws.amazon.com/sdkref/latest/guide/access-login.html)

按照 AWS CLI 上面给出的步骤登录后，该`config`文件将如下所示。

```
[default]
login_session = arn:aws:iam::0123456789012:user/username
region = us-east-1

[my-dev-profile]
login_session = arn:aws:iam::0123456789012:user/username
region = us-east-1
```

## 启用和配置 IAM Identity Center
<a name="idc-config-sso"></a>

要使用 IAM Identity Center，必须先启用并进行配置。要详细了解如何为 SDK 执行此操作，请查看*AWS SDKs 和工具参考指南*中 [IAM Identity Center 身份验证](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)主题中的**步骤 1**。具体而言，请按照**我没有通过 IAM Identity Center 确立访问权限**下的所有必要说明进行操作。

## 将开发工具包配置为使用 IAM Identity Center。
<a name="idc-config-sdk"></a>

有关如何配置软件开发工具包以使用 IAM Identity Center 的信息，请参阅《*工具参考指南》*中 [IAM 身份中心身份验证](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)主题的**步骤 2**。AWS SDKs 完成此配置后，您的系统应包含以下元素：
+  AWS CLI，用于在运行应用程序之前启动 AWS 访问门户会话。
+ 共享 AWS `config`文件，其中包含一个[`[default]`配置](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile)文件，其中包含一组可从 SDK 中引用的配置值。要查找此文件的位置，请参阅*AWS SDKs 和工具参考指南*中的[共享文件的位置](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)。在向发送请求之前， 适用于 .NET 的 AWS SDK 使用配置文件的 SSO 令牌提供者获取凭证。 AWS`sso_role_name` 值是与 IAM Identity Center 权限集关联的 IAM 角色，应允许访问您的应用程序中使用的 AWS 服务 。

  以下示例 `config` 文件显示了使用 SSO 令牌提供程序设置的默认配置文件。配置文件的 `sso_session` 设置是指所指定的 `sso-session` 节。该`sso-session`部分包含启动 AWS 访问门户会话的设置。

  ```
  [default]
  sso_session = my-sso
  sso_account_id = 111122223333
  sso_role_name = SampleRole
  region = us-east-1
  output = json
  
  [sso-session my-sso]
  sso_region = us-east-1
  sso_start_url = https://provided-domain.awsapps.com/start
  sso_registration_scopes = sso:account:access
  ```

**重要**  
如果您使用 AWS IAM Identity Center 进行身份验证，则您的应用程序必须引用以下 NuGet软件包，这样 SSO 解析才能起作用：  
`AWSSDK.SSO`
`AWSSDK.SSOOIDC`
未能引用这些程序包将导致*运行时系统*异常。

## 启动 AWS 访问门户会话
<a name="idc-start-portal"></a>

在运行可访问的应用程序之前 AWS 服务，您需要为开发工具包进行有效的 AWS 访问门户会话，才能使用 IAM Identity Center 身份验证来解析证书。根据配置的会话时长，访问权限最终将过期，并且开发工具包将遇到身份验证错误。要登录 AWS 访问门户，请在中运行以下命令 AWS CLI。

```
aws sso login
```

由于您有默认的配置文件设置，因此无需使用 `--profile` 选项调用该命令。如果您的 SSO 令牌提供程序配置在使用指定的配置文件，则命令为 `aws sso login --profile named-profile`。

要测试是否已有活动会话，请运行以下 AWS CLI 命令。

```
aws sts get-caller-identity
```

对此命令的响应应该报告共享 `config` 文件中配置的 IAM Identity Center 账户和权限集。

**注意**  
如果您已经有一个有效的 AWS 访问门户会话并且`aws sso login`正在运行，则无需提供凭据。  
登录过程可能会提示您允许 AWS CLI 访问您的数据。由于 AWS CLI 是在适用于 Python 的 SDK 之上构建的，因此权限消息可能包含`botocore`名称的变体。

## 附加信息
<a name="idc-additional-info"></a>
+ 有关在开发环境中使用 IAM Identity Center 和 SSO 的更多信息，请参阅[高级身份验证](advanced-auth.md)部分中的[单点登录](sso.md)。此信息包括替代方法和更高级的方法，以及向您展示如何使用这些方法的教程。
+ 有关 SDK 身份验证的更多选项，例如配置文件和环境变量的使用，请参阅*AWS SDKs 和工具参考指南*中的[配置](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)章节。
+ 有关最佳实践的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
+ 要创建短期 AWS 证书，请参阅 *IAM 用户指南*中的[临时安全证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。
+ 要了解其他凭证提供商，请参阅《*工具参考*指南》AWS SDKs 中的[标准化凭证提供商](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)。