

 適用於 JavaScript 的 AWS SDK v2 已end-of-support。我們建議您遷移至 [適用於 JavaScript 的 AWS SDK v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)。如需如何遷移的其他詳細資訊和資訊，請參閱此[公告](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

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

# 使用 Web 聯合身分來驗證使用者
<a name="loading-browser-credentials-federated-id"></a>

您可以直接設定個別身分提供者，以使用 Web 聯合身分存取 AWS 資源。 AWS 目前支援透過數個身分提供者使用 Web 聯合身分驗證使用者：
+ [Login with Amazon](https://login.amazon.com)
+ [Facebook 登入](https://www.facebook.com/about/login)
+ [Google 登入](https://developers.google.com/identity/)

您必須先使用應用程式支援的供應商註冊應用程式。接著，建立 IAM 角色並設定其許可。然後，您建立的 IAM 角色會用來授予您透過個別身分提供者為其設定的許可。例如，您可以設定角色，讓透過 Facebook 登入的使用者能夠讀取您控制的特定 Amazon S3 儲存貯體。

同時擁有已設定權限的 IAM 角色，以及向您選擇的身分提供者註冊的應用程式之後，您可以設定 SDK，以使用協助程式程式碼取得 IAM 角色的登入資料，如下所示：

```
AWS.config.credentials = new AWS.WebIdentityCredentials({
   RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>/:role/<WEB_IDENTITY_ROLE_NAME>',
   ProviderId: 'graph.facebook.com|www.amazon.com', // this is null for Google
   WebIdentityToken: ACCESS_TOKEN
});
```

`ProviderId` 參數中的值取決於指定的身分提供者。`WebIdentityToken` 參數中的值是透過身分提供者成功登入時所擷取的存取字符。如需為每個身分提供者設定和擷取存取字符的詳細資訊，請參閱身分提供者的文件。

## 步驟 1：向身分提供者註冊
<a name="config-web-identity-register"></a>

若要開始，請向您選擇要支援的身分提供者註冊應用程式。系統會要求您提供可辨識您應用程式和其作者的資訊。這可確保身分提供者了解誰在接收其使用者資訊。在每個案例中，身分供應商會發行您用來設定使用者角色的應用程式 ID。

## 步驟 2：為身分提供者建立 IAM 角色
<a name="config-web-identity-role"></a>

從身分提供者取得應用程式 ID 之後，請前往 IAM 主控台，網址為 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)：//www.healthnet.com，以建立新的 IAM 角色。

**為身分提供者建立 IAM 角色**

1. 前往主控台的 **Roles (角色)** 區段，然後選擇 **Create New Role (新建角色)**。

1. 為新角色輸入可協助您追蹤其用量的名稱，例如 **facebookIdentity**，然後選擇 **Next Step (下一步)**。

1. 在 **Select Role Type (選擇角色類型)** 中，選擇 **Role for Identity Provider Access (身分提供者存取的角色)**。

1. 針對 **Grant access to web identity providers (將存取授予 web 身分提供者)**，選擇 **Select (選取)**。

1. 從**身分提供者**清單中，選擇您要用於此 IAM 角色的身分提供者。  
![\[選取適用於身分提供者存取的角色\]](http://docs.aws.amazon.com/zh_tw/sdk-for-javascript/v2/developer-guide/images/iam-provider-select.png)

1. 輸入在 **Application ID (應用程式 ID)** 中由身分提供者提供的應用程式 ID，然後選擇 **Next Step (下一步)**。

1. 為您要公開的資源設定許可，允許對特定資源進行特定操作。如需 IAM 許可的詳細資訊，請參閱《[IAM AWS 使用者指南》中的 IAM 許可概觀](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions.html)。 **檢視，並視需要自訂角色的信任關係，然後選擇 **Next Step (下一步)**。

1. 連接您需要的額外政策，然後選擇 **Next Step (下一步)**。如需關於 IAM 政策的詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 政策概觀](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。

1. 檢閱新角色，然後選擇 **Create Role (建立角色)**。

您可以將其他限制條件提供給該角色，像是將其範圍限制在特定的使用者 ID。如果該角色將寫入許可授予您的資源，請確保您正確地將角色範圍限制在含正確權限的使用者，否則具有 Amazon、Facebook 或 Google 身分的任何使用者都能夠修改您應用程式中的資源。

如需在 IAM 中使用 Web 聯合身分的詳細資訊，請參閱《*IAM 使用者指南*》中的[關於 Web 聯合身分](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html)。

## 步驟 3：在登入後取得供應商存取字符
<a name="config-web-identity-obtain-token"></a>

使用身分提供者的軟體開發套件來為應用程式設定登入動作。您可以透過啟用使用者登入 (使用 OAuth 或 OpenID) 的身分提供者，來下載和安裝 JavaScript 軟體開發套件。如需如何在應用程式中下載和設定軟體開發套件程式碼的詳細資訊，請參閱身分提供者的軟體開發套件文件
+ [Login with Amazon](https://login.amazon.com/website)
+ [Facebook 登入](https://developers.facebook.com/docs/javascript)
+ [Google 登入](https://developers.google.com/identity/)

## 步驟 4：取得暫時登入資料
<a name="config-web-identity-get-credentials"></a>

在應用程式、角色和資源許可都設定後，將該程式碼新增至應用程式來取得暫時登入資料。這些登入資料是透過 AWS Security Token Service 使用 Web 聯合身分的 提供。使用者登入身分提供者，而傳回存取字符。針對您為此身分提供者建立的 IAM 角色，使用 ARN 設定`AWS.WebIdentityCredentials`物件：

```
AWS.config.credentials = new AWS.WebIdentityCredentials({
    RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>',
    ProviderId: 'graph.facebook.com|www.amazon.com', // Omit this for Google
    WebIdentityToken: ACCESS_TOKEN // Access token from identity provider
});
```

後續建立的服務物件會擁有適當的登入資料。在設定 `AWS.config.credentials` 屬性前建立的物件不會有目前的登入資料。

您也可以建立 `AWS.WebIdentityCredentials`，再擷取存取字符。此可讓您建立依靠登入資料的服務物件，再載入存取字符。若要這麼做，請建立不含 `WebIdentityToken` 參數的登入資料物件：

```
AWS.config.credentials = new AWS.WebIdentityCredentials({
  RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>',
  ProviderId: 'graph.facebook.com|www.amazon.com' // Omit this for Google
});

// Create a service object
var s3 = new AWS.S3;
```

接著會透過包含該存取字符的身分提供者軟體開發套件，在回呼中設定 `WebIdentityToken`：

```
AWS.config.credentials.params.WebIdentityToken = accessToken;
```