

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

# 撰寫應用程式使用 Web 聯合身分
<a name="WIF.RunningYourApp"></a>

若要使用 Web 聯合身分，您的應用程式必須假設您建立的 IAM 角色。完成後，應用程式會遵守您連接到角色的存取政策。

在執行時期，如果您的應用程式使用 Web 聯合身分，則必須遵循下列步驟進行：

1. **使用第三方身分提供者進行身分驗證。**您的應用程式必須使用身分提供者所提供的介面來呼叫身分提供者。對使用者進行身分驗證的確切方式取決於供應商以及執行應用程式的平台。一般而言，如果使用者尚未登入，則身分供應商會負責顯示該供應商的登入頁面。

   身分提供者對使用者進行身分驗證之後，供應商會將 Web 身分字符傳回給應用程式。此字符的格式取決於供應商，但通常是極長的字元字串。

1. **取得臨時 AWS 安全登入資料。**若要執行此操作，您的應用程式會將 `AssumeRoleWithWebIdentity` 請求傳送至 AWS Security Token Service (AWS STS)。此請求包含以下項目：
   + 先前步驟中的 Web 身分字符
   + 來自身分提供者的應用程式 ID
   + 針對此應用程式的這個身分提供者所建立之 IAM 角色的 Amazon Resource Name (ARN)

   AWS STS 會傳回一組在特定時間後過期 AWS 的安全登入資料 （預設為 3，600 秒）。

   以下是 AWS STS中 `AssumeRoleWithWebIdentity` 動作的範例請求和回應。Web 身分字符取自 Login with Amazon 身分提供者。

   ```
   GET / HTTP/1.1
   Host: sts.amazonaws.com
   Content-Type: application/json; charset=utf-8
   URL: https://sts.amazonaws.com/?ProviderId=www.amazon.com
   &DurationSeconds=900&Action=AssumeRoleWithWebIdentity
   &Version=2011-06-15&RoleSessionName=web-identity-federation
   &RoleArn=arn:aws:iam::123456789012:role/GameRole
   &WebIdentityToken=Atza|IQEBLjAsAhQluyKqyBiYZ8-kclvGTYM81e...(remaining characters omitted)
   ```

   

   ```
   <AssumeRoleWithWebIdentityResponse
     xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
     <AssumeRoleWithWebIdentityResult>
       <SubjectFromWebIdentityToken>amzn1.account.AGJZDKHJKAUUSW6C44CHPEXAMPLE</SubjectFromWebIdentityToken>
       <Credentials>
         <SessionToken>AQoDYXdzEMf//////////wEa8AP6nNDwcSLnf+cHupC...(remaining characters omitted)</SessionToken>
         <SecretAccessKey>8Jhi60+EWUUbbUShTEsjTxqQtM8UKvsM6XAjdA==</SecretAccessKey>
         <Expiration>2013-10-01T22:14:35Z</Expiration>
         <AccessKeyId>06198791C436IEXAMPLE</AccessKeyId>
       </Credentials>
       <AssumedRoleUser>
         <Arn>arn:aws:sts::123456789012:assumed-role/GameRole/web-identity-federation</Arn>
         <AssumedRoleId>AROAJU4SA2VW5SZRF2YMG:web-identity-federation</AssumedRoleId>
       </AssumedRoleUser>
     </AssumeRoleWithWebIdentityResult>
     <ResponseMetadata>
       <RequestId>c265ac8e-2ae4-11e3-8775-6969323a932d</RequestId>
     </ResponseMetadata>
   </AssumeRoleWithWebIdentityResponse>
   ```

1. **存取 AWS 資源。** AWS STS 的回應包含應用程式存取 DynamoDB 資源所需的資訊：
   + `AccessKeyID`、`SecretAccessKey` 和 `SessionToken` 欄位包含只適用於此使用者和此應用程式的安全憑證。
   + `Expiration` 欄位表示這些憑證的時間限制，在此時間之後就不再有效。
   + `AssumedRoleId` 欄位包含應用程式已擔任之工作階段特定 IAM 角色的名稱。應用程式會在此工作階段期間遵守 IAM 政策文件中的存取控制。
   + `SubjectFromWebIdentityToken` 欄位包含出現在此特定身分提供者的 IAM 政策變數中的唯一 ID。以下是所支援供應商的 IAM 政策變數，及其範例值：  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/amazondynamodb/latest/developerguide/WIF.RunningYourApp.html)

如需使用這些政策變數的範例 IAM 政策，請參閱 [範例政策：使用條件進行精細定義存取控制](specifying-conditions.md#FGAC_DDB.Examples)。

如需如何 AWS STS 產生臨時存取登入資料的詳細資訊，請參閱《*IAM 使用者指南*》中的[請求臨時安全登入](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)資料。