本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
取得憑證
您可以使用 Amazon Cognito 將臨時、有限權限的登入資料交付到您的應用程式,以便您的使用者可以存取 AWS 資源。本節說明如何取得憑證,以及如何從身分集區擷取 Amazon Cognito 身分。
Amazon Cognito 可支援已驗證和未驗證的身分。未經授權的使用者的身分未經驗證,因此這個角色適用於您應用程式的訪客使用者,或使用者身分是否已驗證並不重要的情況。已驗證使用者透過第三方身分提供者或驗證其身分的使用者集區來登入應用程式。請務必適當地限制資源許可範圍,以避免從未經授權的使用者授與資源的存取權。
Amazon Cognito 身分不是憑證。在 AWS Security Token Service () 中使用 Web 聯合身分支援交換憑證AWS STS。若要取得應用程式使用者的 AWS 登入資料,請使用 AWS SDK 的 Cognito 身分集區登入資料提供者。例如,在適用於 JavaScript 的 AWS SDK (v3) 中,使用 @aws-sdk/credential-providers套件中的 fromCognitoIdentityPool函數。接著會使用 交換身分做為登入資料 AWS STS。
Web 身分憑證提供者是 AWS SDK 中預設憑證提供者鏈結的一部分。若要在 SDK AWS 或 的本機config檔案中設定您的身分集區字符 AWS CLI,請新增web_identity_token_file設定檔項目。請參閱《 AWS SDKs和工具參考指南》中的擔任角色登入資料提供者。
若要了解有關如何在 SDK 中填入 Web 身分憑證的更多信息,請參閱 SDK 開發人員指南。為了獲得最佳結果,請使用內建的身分集區整合啟動您的專案 AWS Amplify。
AWS 使用身分集區取得和設定登入資料的開發套件資源
-
《Amplify 開發人員中心》中的身分池聯合
(Android) -
《Amplify 開發人員中心》中的身分池聯合
(iOS) -
《 適用於 JavaScript 的 AWS SDK 開發人員指南》中的使用 Amazon Cognito Identity 驗證使用者
-
《 適用於 .NET 的 AWS SDK 開發人員指南》中的 Amazon Cognito 登入資料提供者
-
《 適用於 Go 的 AWS SDK 開發人員指南》中的以程式設計方式指定登入資料
-
《 AWS SDK for Java 2.x 開發人員指南》中的在程式碼中提供臨時憑證
-
《 適用於 PHP 的 AWS SDK 開發人員指南》中的 assumeRoleWithWebIdentityCredentialProvider 提供者
-
在 適用於 Python (Boto3) 的 AWS SDK 文件中使用 Web 身分提供者指派角色
-
《 適用於 Rust 的 AWS SDK 開發人員指南》中的指定您的登入資料和預設區域
下列各節提供部分 AWS SDKs中的範例程式碼。
您可以使用 Amazon Cognito 將臨時、有限權限的登入資料交付到您的應用程式,以便您的使用者可以存取 AWS 資源。Amazon Cognito 可支援已驗證和未驗證的身分。若要提供 AWS 登入資料給您的應用程式,請遵循下列步驟。
若要在 Android 應用程式中使用 Amazon Cognito 身分集區,請設定 AWS Amplify。如需詳細資訊,請參閱《Amplify 開發人員中心》中的身分驗證
擷取 Amazon Cognito 身分
如果您要允許未驗證的使用者,可以立即為您的最終使用者擷取唯一 Amazon Cognito 識別符 (身分 ID)。如果您要驗證使用者,可以在登入資料供應商中設定登入權杖之後,擷取身分 ID:
String identityId = credentialsProvider.getIdentityId(); Log.d("LogTag", "my ID is " + identityId);
注意
請不要在應用程式的主要執行緒中呼叫 getIdentityId()、refresh() 或 getCredentials()。從 Android 3.0 (API 層級 11) 開始,如果您在主要應用程式執行緒上執行網路 I/O,您的應用程式將會自動失敗,並擲出 NetworkOnMainThreadExceptionAsyncTask 將您的程式碼移到背景執行緒。如需詳細資訊,請參閱 Android documentationgetCachedIdentityId()來擷取 ID,但前提是已在本機快取過 ID。否則,此方法會傳回空值。
您可以使用 Amazon Cognito 將臨時、有限權限的登入資料交付到您的應用程式,以便您的使用者可以存取 AWS 資源。Amazon Cognito 身分集區可支援已驗證和未驗證的身分。若要提供 AWS 登入資料給應用程式,請完成下列步驟。
若要在 iOS 應用程式中使用 Amazon Cognito 身分集區,請設定 AWS Amplify。如需詳細資訊,請參閱《Amplify 開發人員中心》中的 Swift 身分驗證
擷取 Amazon Cognito 身分
如果您要允許未驗證的使用者,可以立即為您的最終使用者擷取唯一 Amazon Cognito 識別符 (身分 ID),或者如果您要驗證使用者,可以在憑證供應商中設定登入權杖之後,擷取身分 ID:
// Retrieve your Amazon Cognito ID [[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"Error: %@", task.error); } else { // the task result will contain the identity id NSString *cognitoId = task.result; } return nil; }];
注意
getIdentityId 是非同步呼叫。如果身分 ID 已設定在您的供應商中,您可以呼叫 credentialsProvider.identityId來擷取該身分 (已在本機快取過)。不過,如果未在提供者上設定身分 ID,呼叫 credentialsProvider.identityId會傳回 nil。如需詳細資訊,請參閱 Amplify iOS SDK 參考
您可以使用 Amazon Cognito 將臨時、有限權限的登入資料交付到您的應用程式,以便您的使用者可以存取 AWS 資源。Amazon Cognito 可支援已驗證和未驗證的身分。若要提供 AWS 登入資料給您的應用程式,請遵循下列步驟。
若要在 iOS 應用程式中使用 Amazon Cognito 身分集區,請設定 AWS Amplify。如需詳細資訊,請參閱《Amplify 開發人員中心》中的 Swift 身分驗證
擷取 Amazon Cognito 身分
如果您要允許未驗證的使用者,可以立即為您的最終使用者擷取唯一 Amazon Cognito 識別符 (身分 ID),或者如果您要驗證使用者,可以在憑證供應商中設定登入權杖之後,擷取身分 ID:
// Retrieve your Amazon Cognito ID credentialsProvider.getIdentityId().continueWith(block: { (task) -> AnyObject? in if (task.error != nil) { print("Error: " + task.error!.localizedDescription) } else { // the task result will contain the identity id let cognitoId = task.result! print("Cognito id: \(cognitoId)") } return task; })
注意
getIdentityId 是非同步呼叫。如果身分 ID 已設定在您的供應商中,您可以呼叫 credentialsProvider.identityId來擷取該身分 (已在本機快取過)。不過,如果未在提供者上設定身分 ID,呼叫 credentialsProvider.identityId會傳回 nil。如需詳細資訊,請參閱 Amplify iOS SDK 參考
如果您尚未建立身分集區,請在 Amazon Cognito 主控台fromCognitoIdentityPool。
使用身分提供者設定身分集區之後,您可以使用@aws-sdk/credential-providers套件中的 fromCognitoIdentityPool函數來驗證使用者。與其設定全域 AWS.config.credentials,不要透過登入資料提供者的 credentials 屬性,將登入資料提供者直接連接到每個服務用戶端。v3 SDK 會在用戶端第一次提出請求時延遲解析提供者,因此沒有個別的呼叫來取得登入資料。下列範例會將提供者連接至 S3Client:
import { S3Client } from "@aws-sdk/client-s3"; import { fromCognitoIdentityPool } from "@aws-sdk/credential-providers"; // Set the region where your identity pool exists (for example, us-east-1 or eu-west-1) const region = "REGION"; // Attach the credentials provider to your service client const client = new S3Client({ region, credentials: fromCognitoIdentityPool({ identityPoolId: "IDENTITY_POOL_ID", logins: { // optional tokens, used for authenticated login "graph.facebook.com": "FBTOKEN", "www.amazon.com": "AMAZONTOKEN", "accounts.google.com": "GOOGLETOKEN", "appleid.apple.com": "APPLETOKEN" }, clientConfig: { region }, }), }); // Credentials are resolved lazily when the client first makes a request. // To inspect them directly, call the provider and await the result // (from inside an async function): const credentials = await client.config.credentials(); const { accessKeyId, secretAccessKey, sessionToken } = credentials;
選用的 logins 屬性是身分提供者名稱與這些身分提供者的身分權杖的對應。您從身分提供者取得權杖的方式,取決於您使用的供應商。例如,如果 Facebook 是您的身分提供者之一,您可以使用 FB.loginFacebook 開發套件的
FB.login(function (response) { if (response.authResponse) { // logged in const region = "us-east-1"; const client = new S3Client({ region, credentials: fromCognitoIdentityPool({ identityPoolId: "us-east-1:1699ebc0-7900-4099-b910-2df94f52a030", logins: { "graph.facebook.com": response.authResponse.accessToken }, clientConfig: { region }, }), }); console.log('You are now logged in.'); } else { console.log('There was a problem logging you in.'); } });
擷取 Amazon Cognito 身分
您可以為最終使用者擷取唯一的 Amazon Cognito 識別符 (身分 ID)。如果您允許未經驗證的使用者,您可以立即擷取它。如果您驗證使用者,請在設定登入字符後擷取它。fromCognitoIdentityPool 提供者會在其解析的登入資料identityId上公開 ,因此您可以從使用提供者的用戶端解析的登入資料中讀取:
// Inside an async function: const { identityId } = await client.config.credentials();
您可以使用 Amazon Cognito 將臨時、有限權限的登入資料交付到您的應用程式,以便您的使用者可以存取 AWS 資源。Amazon Cognito 可支援已驗證和未驗證的身分。若要提供 AWS 登入資料給您的應用程式,請遵循下列步驟。
AWS SDK for Unity 現在是 適用於 .NET 的 SDK 的一部分。若要在 中開始使用 Amazon Cognito 適用於 .NET 的 SDK,請參閱《 適用於 .NET 的 AWS SDK 開發人員指南》中的 Amazon Cognito 登入資料提供者。或者,請參閱 Amplify 開發中心
擷取 Amazon Cognito 身分
如果您要允許未驗證的使用者,可以立即為您的最終使用者擷取唯一 Amazon Cognito 識別符 (身分 ID),或者如果您要驗證使用者,可以在憑證供應商中設定登入權杖之後,擷取身分 ID:
string identityId = await credentials.GetIdentityIdAsync();