

 适用于 .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/)。

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

# 凭证和配置文件解析
<a name="creds-assign"></a>

适用于 .NET 的 AWS SDK按特定顺序搜索凭证，并对当前应用程序使用第一个可用集。

**凭证搜索顺序**

1. 在 AWS 服务客户端上显式设置的凭证，如[访问应用程序中的凭证和配置文件](creds-locate.md)中所述。
**注意**  
该主题之所以出现在[特殊注意事项](special-considerations.md)部分中，是因为它不是指定凭证的首选方法。

1. 一个凭证配置文件，其名称由 [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html#properties) 中的值指定。

1. 名称由 `AWS_PROFILE` 环境变量指定的凭证配置文件。

1. `[default]` 凭证配置文件。

1. 根据 `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 和 `AWS_SESSION_TOKEN` 环境变量 (如果这些变量都不为空) 创建的 [SessionAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TSessionAWSCredentials.html)。

1.  根据 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 环境变量 (如果这两个变量不为空) 创建的 [BasicAWSCredentials](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TBasicAWSCredentials.html)。

1. [容器凭证提供程序](https://docs.aws.amazon.com/sdkref/latest/guide/feature-container-credentials.html)。

1. Amazon EC2 实例元数据。

如果您的应用程序在 Amazon EC2 实例上运行（例如在生产环境中），请使用 IAM 角色，如 [使用 IAM 角色授予访问权限](net-dg-hosm.md) 中所述。否则，例如在预发布测试中，将凭证存储在服务器上使用 AWS 凭证文件格式的文件中（Web 应用程序有权访问此文件）。

## 配置文件解析
<a name="net-dg-config-creds-profile-resolution"></a>

凭证有两种不同的存储机制，请务必了解如何配置适用于 .NET 的 AWS SDK以使用它们。[AWSConfigs.AWSProfilesLocation](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 属性控制适用于 .NET 的 AWS SDK如何查找凭证配置文件。


****  

| AWSProfilesLocation | 配置文件解析行为 | 
| --- | --- | 
|  null (未设置) 或空  |  如果平台支持，请搜索 SDK Store，然后在[默认位置](creds-file.md)搜索共享 AWS 凭证文件。如果配置文件不在上述任何一个位置，请搜索 `~/.aws/config`（Linux 或 macOS）或 `%USERPROFILE%\.aws\config`（Windows）。  | 
|  AWS 凭证文件格式的文件的路径  |  *仅* 在指定文件中搜索具有指定名称的配置文件。  | 

## 使用联合用户账户凭证
<a name="net-dg-config-creds-saml"></a>

对于采用适用于 .NET 的 AWS SDK（[AWSSDK.Core](https://www.nuget.org/packages/AWSSDK.Core/) 版本 3.1.6.0 和更高版本）的应用程序，可以通过 Active Directory Federation Services（AD FS）使用联合用户账户来利用安全断言标记语言（SAML）访问 AWS 服务。

联合访问支持意味着用户可使用您的 Active Directory 进行身份验证。系统将自动为用户授予临时凭证。当您的应用程序调用 AWS 服务时，将使用这些临时凭证 (有效期为 1 小时)。开发工具包将管理临时凭证。对于已加入域的用户账户，如果您的应用程序发出调用但凭证已过期，则将自动重新验证用户的身份并授予全新凭证。(对于未加入域的账户，在重新进行身份验证之前，系统将提示用户输入凭证。)

要在 .NET 应用程序中使用此支持，您必须先使用 PowerShell cmdlet 设置角色配置文件。要了解具体信息，请参阅[AWS Tools for Windows PowerShell文档](https://docs.aws.amazon.com/powershell/latest/userguide/saml-pst.html)。

设置角色配置文件后，请在应用程序中引用该配置文件。有多种方法可以做到这一点，其中一种是像处理其他凭证配置文件一样使用 [AWSConfigs.AWSProfileName](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Amazon/TAWSConfigs.html) 属性。

*AWS Security Token Service* 程序集（[awssdk.securityToken](https://www.nuget.org/packages/AWSSDK.SecurityToken/)）提供 SAML 支持以获取 AWS 凭证。要使用联合用户账户凭证，请确保您的应用程序可以使用此程序集。

## 指定角色或临时凭证
<a name="net-dg-config-creds-assign-role"></a>

对于 Amazon EC2 实例上运行的应用程序，管理凭证最安全的方式是使用 IAM 角色，如[使用 IAM 角色授予访问权限](net-dg-hosm.md)中所述。

对于软件可执行文件对组织外部用户可用的应用程序情景，建议您将软件设计为使用*临时安全凭证*。除了提供对 AWS 资源的有限访问之外，让这些凭证在指定时段后过期也会有好处。有关临时安全凭证的更多信息，请参阅：
+  [临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) 
+  [Amazon Cognito 身份池](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)

## 使用代理凭证
<a name="net-dg-config-creds-proxy"></a>

如果您的软件通过代理与 AWS 进行通信，则可使用服务的 `Config` 类的 `ProxyCredentials` 属性来为代理指定凭证。服务的 `Config` 类通常是该服务主命名空间的一部分。示例包括以下内容：[Amazon.CloudDirectory](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudDirectory/NCloudDirectory.html) 命名空间中的 [AmazonCloudDirectoryConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudDirectory/TCloudDirectoryConfig.html) 和 [Amazon.GameLift](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/NGameLift.html) 命名空间中的 [AmazonGameLiftConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/TGameLiftConfig.html)。

例如，对于 [Amazon S3](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html)，您可以使用如下所示的代码，其中 `SecurelyStoredUserName` 和 `SecurelyStoredPassword` 为 [NetworkCredential](https://learn.microsoft.com/en-us/dotnet/api/system.net.networkcredential) 对象中指定的代理用户名和密码。

```
AmazonS3Config config = new AmazonS3Config();
config.ProxyCredentials = new NetworkCredential(SecurelyStoredUserName, SecurelyStoredPassword);
```

**注意**  
早期版本的开发工具包使用的是 `ProxyUsername` 和 `ProxyPassword`，但这两个属性已被弃用。