針對行動應用程式使用 OIDC 聯合 API 作業 - AWS Identity and Access Management

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

針對行動應用程式使用 OIDC 聯合 API 作業

若要取得最佳結果,請在幾乎所有 OIDC 聯合案例中使用 Amazon Cognito 做為身分識別代理程式。Amazon Cognito 易於使用,並提供額外功能,如匿名 (未經身分驗證) 存取,以及跨裝置和提供者的同步使用者資料。不過,如果您已透過手動呼叫 AssumeRoleWithWebIdentity API 建立使用 OIDC 聯盟的應用程式,您可以繼續使用該應用程式,而您的應用程式仍可正常運作。

沒有 Amazon Cognito 的情況下使用 OIDC 聯盟的程序遵循以下一般概述:

  1. 使用 IdP 註冊為開發人員,並使用外部身分提供者 (IdP) 設定您的應用程式,IdP 為您的應用程式提供唯一 ID。(不同的 IdPs 使用不同的術語這個過程。 此大綱使用術語配置,用於使用 IdP 識別您的應用程序的過程。) 每個 IdP 都會為您提供該 IdP 唯一的應用程序 ID,因此,如果您將同一個應用程序配置為多個 IdPs,則您的應用程序將具有多個應用程序 ID。可依照每個提供商的要求配置多個應用程式。

    下列外部連結提供有關使用某些常用身分識別提供者 (IdPs) 的資訊:

    重要

    如果您使用來自谷歌、臉書或 Amazon Cognito 的 OIDC 身分供應商,請勿在中建立個別的 IAM 身分提供者。 AWS Management Console 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 的使用者才能存取它。如需詳細資訊,請參閱本主題稍後的 識別具有 OIDC 聯盟的使用者

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