

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在適用於 PHP 的 SDK AWS STS 中使用 的臨時登入資料
<a name="guide_credentials_temporary"></a>

 AWS Security Token Service (AWS STS) 可讓您為 IAM 使用者或您透過聯合身分驗證的使用者請求有限權限、**臨時憑證**。如需進一步了解，請參閱《*IAM 使用者指南*》中的[暫時安全登入](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)資料。您可以使用臨時安全登入資料來存取大多數 AWS 服務。如需可接受臨時安全憑證的服務清單，請參閱《IAM 使用者指南》中的[可搭配 IAM 運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。**

臨時憑證的一個常見使用案例是透過第三方身分提供者驗證使用者，授予行動或用戶端應用程式存取 AWS 資源的權限 （請參閱 [Web Identity Federation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html))。

## 取得臨時登入資料
<a name="getting-temporary-credentials"></a>

AWS STS 有數個 操作會傳回暫時登入資料，但`GetSessionToken`操作是最簡單的示範。下列程式碼片段會透過呼叫 PHP 開發套件 STS 用戶端的 `getSessionToken`方法來擷取臨時憑證。

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

$stsClient = $sdk->createSts();

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

`GetSessionToken` 和其他 AWS STS 操作的結果一律包含 `'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 的 AWS SDK
<a name="providing-temporary-credentials-to-the-sdk-php"></a>

您可以透過執行個體化 AWS 用戶端並 AWS 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()` helper 方法。此方法會從 AWS STS 結果中擷取資料，並為您建立 `Credentials` 物件。

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

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

如需有關為什麼您可能需要在應用程式或專案中使用暫時登入資料的詳細資訊，請參閱 AWS STS 文件中的[授予暫時存取權的案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。