使用適用於行動應用程式的 Web 聯合身分 API 操作 - AWS Identity and Access Management

使用適用於行動應用程式的 Web 聯合身分 API 操作

為獲得最佳效果,請使用 Amazon Cognito 作為幾乎所有 Web 聯合身分方案的身分經紀人。Amazon Cognito 易於使用,並提供額外功能,如匿名 (未經身分驗證) 存取,以及跨裝置和提供者的同步使用者資料。但是,如果您已經透過手動呼叫 AssumeRoleWithWebIdentity API 建立了一個使用 Web 聯合身分的應用程式,則可以繼續使用它,您的應用程式仍然可以正常工作。

注意

為了協助了解 Web 聯合身分的運作方式,您可以使用 Web Identity Federation Playground。透過使用互動式網站,您可以透過 Login with Amazon、Facebook 或 Google 進行身分驗證、取得臨時安全憑證,然後使用這些憑證對 AWS 提出請求的程序。

在沒有 Amazon Cognito 的情況下使用 Web 聯合身分的程序遵循下列一般概述:

  1. 使用 IdP 註冊為開發人員,並使用外部身分提供者 (IdP) 設定您的應用程式,IdP 為您的應用程式提供唯一 ID。(不同的 IdP 可能使用不同的術語來表達此程序。此大綱則使用術語設定來表示向 IdP 識別您應用程式的程序)。每個 IdP 均提供一個對於該 IdP 來說是獨有的應用程式 ID,因此如果根據多個 IdP 的要求設定同一應用程式,則該應用程式將會有多個應用程式 ID。可依照每個提供商的要求配置多個應用程式。

    下列外部連結提供有關使用其中一些常用身分提供者 (IdP) 的資訊:

    重要

    如果您使用來自 Google、Facebook 或 Amazon Cognito 的 OIDC 身分提供者,請勿在 AWS Management Console 中建立單獨的 IAM 身分提供者。AWS 內建 OIDC 身分識別提供者,可供您使用。略過下列步驟,並直接移至使用您的身分提供者建立新角色。

  2. 如果您使用與 OIDC 相容的 Google、Facebook 或 Amazon Cognito 以外的 IdP,請為其建立 IAM 身分提供者實體。

  3. 在 IAM 中,建立一或多個角色。對於每個角色,定義可以擔任角色的人員 (信任政策) 以及應用程式使用者擁有的許可 (許可政策)。一般而言,您可以為應用程式所支援的每個 IdP 建立一個角色。例如,您可以建立使用者透過 Login with Amazon 登入之應用程式可擔任的角色,使用者透過 Facebook 登入之相同應用程式可擔任的次要角色,以及使用者透過 Google 登入之應用程式可擔任的第三個角色。對於信任關係,請將 IdP (像是 Amazon.com) 指定為Principal (信任實體) 和包含符合 IdP 指派的應用程式 ID 的 Condition針對第三方身分提供者建立角色 (聯合身分) 中會說明不同提供者的角色範例。

  4. 在您的應用程式中,使用 IdP 對您的使用者進行身分驗證。有關如何執行此動作的具體情況會根據您所使用的 IdP (Login with Amazon、Facebook 或 Google) 以及您的應用程式執行的平台而有所不同。例如,Android 應用程式的身分驗證方法可能與 iOS 應用程式或以 JavaScript 為基礎的 Web 應用程式不同。

    一般而言,如果使用者尚未登入,則 IdP 會負責顯示登入頁面。在 IdP 驗證使用者之後,IdP 會向您的應用程式傳回帶有使用者資訊的身分驗證權杖。所包含的資訊取決於 IdP 公開的內容和使用者願意共用的資訊。您可以在您的應用程式中使用此資訊。

  5. 在您的應用程式中,對 AssumeRoleWithWebIdentity 動作進行未簽署呼叫以請求臨時安全性憑證。在請求中,您傳遞 IdP 的身分驗證權杖,並為該 IdP 所建立的 IAM 角色指定 Amazon 資源名稱 (ARN)。AWS 會驗證權杖是否可信且有效,如果是,則將暫時安全憑證傳回給您的應用程式,該憑證具有您在請求中指定之角色的許可。回應還包含來自 IdP 的有關使用者的中繼資料,例如 IdP 與使用者關聯的唯一使用者 ID。

  6. 使用 AssumeRoleWithWebIdentity 回應中的暫時安全憑證,您的應用程式會對 AWS API 操作發出簽署的請求。來自 IdP 的使用者 ID 資訊可以區分應用程式中的使用者,例如,可以將物件放入包含使用者 ID 作為字首或後綴的 Amazon S3 資料夾中。這可讓您建立鎖定該資料夾的存取控制政策,以便只有具有該 ID 的使用者才能存取它。如需詳細資訊,請參閱本主題稍後的 使用 Web 聯合身分識別使用者

  7. 您的應用程式必須快取臨時安全憑證,如此每次應用程式需要向 AWS 發出請求時都不必取得新的憑證。在預設情況下,憑證可以使用一小時。當憑證過期 (或在此之前),您再次呼叫 AssumeRoleWithWebIdentity 以取得一組新的臨時安全憑證。根據 IdP 以及如何管理權杖,您可能需要在對 AssumeRoleWithWebIdentity 進行新呼叫之前重新整理 IdP 的權杖,因為 IdP 的權杖通常也會在固定時間後過期。如果使用 AWS SDK for iOS 或 AWS SDK for Android,則可以使用 AmazonSTSCredentialsProvider 動作來管理 IAM 暫時憑證,包含視需要重新整理它們。