本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
針對行動應用程式使用 OIDC 聯合 API 作業
若要取得最佳結果,請在幾乎所有 OIDC 聯合案例中使用 Amazon Cognito 做為身分識別代理程式。Amazon Cognito 易於使用,並提供額外功能,如匿名 (未經身分驗證) 存取,以及跨裝置和提供者的同步使用者資料。不過,如果您已透過手動呼叫 AssumeRoleWithWebIdentity
API 建立使用 OIDC 聯盟的應用程式,您可以繼續使用該應用程式,而您的應用程式仍可正常運作。
在沒有 Amazon Cognito 的情況下使用 OIDC 聯盟的程序遵循以下一般概述:
-
使用 IdP 註冊為開發人員,並使用外部身分提供者 (IdP) 設定您的應用程式,IdP 為您的應用程式提供唯一 ID。(不同的 IdPs 使用不同的術語這個過程。 此大綱使用術語配置,用於使用 IdP 識別您的應用程序的過程。) 每個 IdP 都會為您提供該 IdP 唯一的應用程序 ID,因此,如果您將同一個應用程序配置為多個 IdPs,則您的應用程序將具有多個應用程序 ID。可依照每個提供商的要求配置多個應用程式。
下列外部連結提供有關使用某些常用身分識別提供者 (IdPs) 的資訊:
-
Facebook 開發人員網站上的新增 Facebook 登入到您的應用程式或網站
。 -
Google 開發人員網站上的登入時使用 OAuth 2.0 (OpenID Connect)
。
重要
如果您使用來自谷歌、臉書或 Amazon Cognito 的 OIDC 身分供應商,請勿在中建立個別的 IAM 身分提供者。 AWS Management Console AWS 內建這些 OIDC 身分識別提供者,可供您使用。略過下列步驟,並直接移至使用您的身分提供者建立新角色。
-
如果您使用與 OIDC 相容的 Google、Facebook 或 Amazon Cognito 以外的 IdP,請為其建立 IAM 身分提供者實體。
-
在 IAM 中,建立一或多個角色。對於每個角色,定義可以擔任角色的人員 (信任政策) 以及應用程式使用者擁有的許可 (許可政策)。一般而言,您可以為應用程式所支援的每個 IdP 建立一個角色。例如,您可以建立使用者透過 Login with Amazon 登入之應用程式可擔任的角色,使用者透過 Facebook 登入之相同應用程式可擔任的次要角色,以及使用者透過 Google 登入之應用程式可擔任的第三個角色。對於信任關係,請將 IdP (像是 Amazon.com) 指定為
Principal
(信任實體) 和包含符合 IdP 指派的應用程式 ID 的Condition
。針對第三方身分提供者建立角色 (聯合身分) 中會說明不同提供者的角色範例。 -
在您的應用程式中,使用 IdP 對您的使用者進行身分驗證。有關如何執行此動作的具體情況會根據您所使用的 IdP (Login with Amazon、Facebook 或 Google) 以及您的應用程式執行的平台而有所不同。例如,Android 應用程序的身份驗證方法可能與 iOS 應用程序或 JavaScript基於 Web 應用程序的方法不同。
一般而言,如果使用者尚未登入,則 IdP 會負責顯示登入頁面。在 IdP 驗證使用者之後,IdP 會向您的應用程式傳回帶有使用者資訊的身分驗證權杖。所包含的資訊取決於 IdP 公開的內容和使用者願意共用的資訊。您可以在您的應用程式中使用此資訊。
-
在您的應用程式中,對
AssumeRoleWithWebIdentity
動作進行未簽署呼叫以請求臨時安全性憑證。在請求中,您會傳遞 IdP 的身份驗證令牌,並為您為該 IdP 建立的 IAM 角色指定 Amazon 資源名稱 (ARN)。 AWS 驗證令牌是否受信任且有效,如果是,則將臨時安全憑據返回給您的應用程序,該憑據具有您在請求中命名的角色的權限。回應還包含來自 IdP 的有關使用者的中繼資料,例如 IdP 與使用者關聯的唯一使用者 ID。 -
使用響應中的臨時安全憑據,您的
AssumeRoleWithWebIdentity
應用程序向 AWS API 操作發出簽名請求。來自 IdP 的使用者 ID 資訊可以區分應用程式中的使用者,例如,可以將物件放入包含使用者 ID 作為字首或後綴的 Amazon S3 資料夾中。這可讓您建立鎖定該資料夾的存取控制政策,以便只有具有該 ID 的使用者才能存取它。如需詳細資訊,請參閱本主題稍後的 識別具有 OIDC 聯盟的使用者。 -
您的應用程式必須快取臨時安全憑證,如此每次應用程式需要向 AWS發出請求時都不必取得新的憑證。在預設情況下,憑證可以使用一小時。當憑證過期 (或在此之前),您再次呼叫
AssumeRoleWithWebIdentity
以取得一組新的臨時安全憑證。根據 IdP 以及如何管理權杖,您可能需要在對AssumeRoleWithWebIdentity
進行新呼叫之前重新整理 IdP 的權杖,因為 IdP 的權杖通常也會在固定時間後過期。如果您使用適用 AWS SDK for iOS 或適用 AWS SDK for Android,則可以使用 Amazonsts CredentialsProvider動作來管理 IAM 臨時登入資料,包括視需要重新整理它們。