

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

# 使用适用于 PHP 的 SDK Amazon STS 中的临时证书
<a name="guide_credentials_temporary"></a>

 Amazon Security Token Service (Amazon STS) 允许您为 IAM 用户或通过联合身份验证进行身份验证的用户申请有限权限、**临时证书**。有关深入了解，请参阅 *IAM 用户指南*中的[临时安全凭证](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_temp.html)。您可以使用临时安全证书访问大多数 Amazon 服务。有关接受临时安全凭证的服务列表，请参阅 *IAM 用户指南*中的[使用 IAM 的Amazon 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

临时证书的一个常见用例是，通过第三方身份提供商对用户进行身份验证，授予移动或客户端应用程序访问 Amazon 资源的权限（请参阅 [Web 联合身份](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_providers_oidc.html)验证）。

## 获得临时凭证
<a name="getting-temporary-credentials"></a>

Amazon STS 有几个返回临时证书的`GetSessionToken`操作，但演示起来最简单。以下代码段通过调用 PHP SDK 的 STS 客户端的 `getSessionToken` 方法来检索临时凭证。

```
$sdk = new Aws\Sdk([
    'region'   => 'us-east-1',
]);

$stsClient = $sdk->createSts();

$result = $stsClient->getSessionToken();
```

和其他 Amazon STS 操作的`GetSessionToken`结果始终包含一个`'Credentials'`值。如果打印 `$result`（例如，通过使用 `print_r($result)`），则看起来如下所示。

```
Array
(
    ...
    [Credentials] => Array
    (
        [SessionToken] => '<base64 encoded session token value>'
        [SecretAccessKey] => '<temporary secret access key value>'
        [Expiration] => 2013-11-01T01:57:52Z
        [AccessKeyId] => '<temporary access key value>'
    )
    ...
)
```

## 向提供临时证书 适用于 PHP 的 Amazon SDK
<a name="providing-temporary-credentials-to-the-sdk-php"></a>

您可以通过实例化 Amazon 客户端并直接传入从 Amazon STS 中接收到的值，将临时证书用于其他客户端。

```
use Aws\S3\S3Client;

$result = $stsClient->getSessionToken();

$s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' => [
        'key'    => $result['Credentials']['AccessKeyId'],
        'secret' => $result['Credentials']['SecretAccessKey'],
        'token'  => $result['Credentials']['SessionToken']
    ]
]);
```

您还可以构建 `Aws\Credentials\Credentials` 对象并在实例化客户端时使用该对象。

```
use Aws\Credentials\Credentials;
use Aws\S3\S3Client;

$result = $stsClient->getSessionToken();

$credentials = new Credentials(
    $result['Credentials']['AccessKeyId'],
    $result['Credentials']['SecretAccessKey'],
    $result['Credentials']['SessionToken']
);

$s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);
```

但是，提供临时凭证的*最佳 *方式是使用 `StsClient` 随附的 `createCredentials()` 帮助程序方法。此方法从 Amazon STS 结果中提取数据并为您创建`Credentials`对象。

```
$result = $stsClient->getSessionToken();
$credentials = $stsClient->createCredentials($result);

$s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);
```

有关为何可能需要在应用程序或项目中使用临时证书的更多信息，请参阅 Amazon STS 文档中的[授予临时访问权限的场景](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_temp.html)。