使用 Web 聯合身分來驗證使用者 - AWS SDK for JavaScript

我們宣布了即將推 end-of-support 出的 AWS SDK for JavaScript v2。我們建議您移轉至 AWS SDK for JavaScript v3。有關日期,其他詳細信息以及如何遷移的信息,請參閱鏈接的公告。

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

使用 Web 聯合身分來驗證使用者

您可以直接配置單個身份提供程序以訪問AWS使用 web 聯合身分的資源。AWS目前透過各種身分供應商,使用 web 聯合身分對使用者進行身份驗證:

您必須先使用應用程式支援的供應商註冊應用程式。接下來,建立 IAM 角色並為其設定許可。接下來,系統會使用您建立的 IAM 角色來透過個別身分供應商授予您為其設定的許可。例如,您可以設定一個角色,來允許透過 Facebook 登入的使用者擁有對您控制之特定 Amazon S3 存取的讀取存取。

在同時擁有包含設定權限的 IAM 角色和使用所選身分供應商註冊的應用程式後,您可以設定軟體開發套件以使用協助程式來取得 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:向身分供應商註冊

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

步驟 2:為身分供應商建立 IAM 角色

從身分供應商取得應用程式 ID 後,前往 IAM 主控台https://console.aws.amazon.com/iam/創建新的 IAM 角色。

為身分供應商建立 IAM 角色
  1. 前往主控台的 Roles (角色) 區段,然後選擇 Create New Role (新建角色)

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

  3. Select Role Type (選擇角色類型) 中,選擇 Role for Identity Provider Access (身分供應商存取的角色)

  4. 針對 Grant access to web identity providers (將存取授予 web 身分供應商),選擇 Select (選取)

  5. 來自身分供應商列表中,選擇您要用於此 IAM 角色的身分供應商。

    選取適用於身分供應商存取的角色
  6. 輸入在 Application ID (應用程式 ID) 中由身分供應商提供的應用程式 ID,然後選擇 Next Step (下一步)

  7. 為您要公開的資源設定許可,允許對特定資源進行特定操作。如需 IAM 許可的詳細資訊,請參概觀AWSIAM 許可中的IAM User Guide。檢視,並視需要自訂角色的信任關係,然後選擇 Next Step (下一步)

  8. 連接您需要的額外政策,然後選擇 Next Step (下一步)。如需 IAM 政策的詳細資訊,請參IAM 政策概觀中的IAM User Guide

  9. 檢閱新角色,然後選擇 Create Role (建立角色)

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

如需在 IAM 中使用 web 聯合身分的詳細資訊,請參關於 Web 聯合身分中的IAM User Guide

步驟 3:在登入後取得供應商存取字符

使用身分供應商的軟體開發套件來為應用程式設定登入動作。您可以透過啟用使用者登入 (使用 OAuth 或 OpenID) 的身分供應商,來下載和安裝 JavaScript 軟體開發套件。如需如何在應用程式中下載和設定軟體開發套件程式碼的詳細資訊,請參閱身分供應商的軟體開發套件文件

步驟 4:取得臨時登入資料

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

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;