取得憑證 - Amazon Cognito

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

取得憑證

您可以使用 Amazon Cognito 向應用程式提供臨時、有限權限的登入資料,以便您的使用者可以存取 AWS 資源。本節說明如何取得憑證,以及如何從身分集區擷取 Amazon Cognito 身分。

Amazon Cognito 可支援已驗證和未驗證的身分。未經授權的使用者的身分未經驗證,因此這個角色適用於您應用程式的訪客使用者,或使用者身分是否已驗證並不重要的情況。已驗證使用者透過第三方身分提供者或驗證其身分的使用者集區來登入應用程式。請務必適當地限制資源許可範圍,以避免從未經授權的使用者授與資源的存取權。

Amazon Cognito 身分不是憑證。它們會使用 AWS Security Token Service (AWS STS) 中的 Web 身分同盟支援來交換憑證。若要您的應用程式使用者取得 AWS 憑證,建議的方法是使用 AWS.CognitoIdentityCredentials。然後,會使用將認證物件中的識別交換為認證 AWS STS。

注意

如果您在 2015 年 2 月之前建立身分池,您必須重新建立您的角色與身分池的關聯,以便使用 AWS.CognitoIdentityCredentials 建構函式,而無需將角色做為參數。若要執行此作業,請開啟 Amazon Cognito 主控台,選擇 Manage identity pools (管理身分集區),選取您的身分集區,然後選擇 Edit identity Pool (編輯身分集區),指定您的已驗證和未驗證角色,然後儲存變更。

Web 身分憑證提供者是 AWS SDK 中預設憑證提供者鏈結的一部分。若要在 AWS SDK 的本機config檔案中設定您的身分識別集區權杖 AWS CLI,或新增設定web_identity_token_file檔項目。請參閱 AWS SDK 和工具參考指南中的假設角色憑證提供者

若要了解有關如何在 SDK 中填入 Web 身分憑證的更多信息,請參閱 SDK 開發人員指南。若要取得最佳結果,請使用內建的身分識別集區整合開始您的專案 AWS Amplify。

AWS 使用身分集區取得及設定認證的 SDK 資源

下列各節提供部分舊版 AWS SDK 中的範例程式碼。

您可以使用 Amazon Cognito 向應用程式提供臨時、有限權限的登入資料,以便您的使用者可以存取 AWS 資源。Amazon Cognito 可支援已驗證和未驗證的身分。要為您的應用提供 AWS 憑據,請按照以下步驟操作。

若要在 Android 應用程式中使用亞馬遜認可身分集區,請進行設 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)開始,NetworkOnMainThreadException如果您在主應用程序線程上執行網絡 I/O,您的應用程序將自動失敗並拋出一個。您需要使用 AsyncTask 將您的程式碼移到背景執行緒。如需詳細資訊,請參閱 Android documentation。您也可以呼叫 getCachedIdentityId()來擷取 ID,但前提是已在本機快取過 ID。否則,此方法會傳回空值。

您可以使用 Amazon Cognito 向應用程式提供臨時、有限權限的登入資料,以便您的使用者可以存取 AWS 資源。Amazon Cognito 身分集區可支援已驗證和未驗證的身分。若要為您的應用程式提供 AWS 認證,請完成以下步驟。

若要在 iOS 應用程式中使用 Amazon Cognito 身分識別集區,請進行設 AWS Amplify定。如需詳細資訊,請參閱《Amplify 開發人員中心》中的 Swift 身分驗證Flutter 身分驗證

擷取 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 主控台中建立身分集區,然後再使用 AWS.CognitoIdentityCredentials

在您以您的身分提供者設定身分集區之後,您可以使用 AWS.CognitoIdentityCredentials 來驗證使用者。若要設定您的應用程式登入資料使用 AWS.CognitoIdentityCredentials,請將 credentials 屬性設定為 AWS.Config 或每個服務的組態。以下範例使用 AWS.Config

// Set the region where your identity pool exists (us-east-1, eu-west-1) AWS.config.region = 'us-east-1'; // Configure the credentials provider to use your identity pool AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 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' } }); // Make the call to obtain credentials AWS.config.credentials.get(function(){ // Credentials will be available when this function is called. var accessKeyId = AWS.config.credentials.accessKeyId; var secretAccessKey = AWS.config.credentials.secretAccessKey; var sessionToken = AWS.config.credentials.sessionToken; });

選用的 Logins 屬性是身分提供者名稱與這些身分提供者的身分權杖的對應。您從身分提供者取得權杖的方式,取決於您使用的供應商。例如,如果 Facebook 是您的身分提供者之一,您可以使用 FB.loginFacebook 開發套件 函數來取得身分提供者權杖:

FB.login(function (response) { if (response.authResponse) { // logged in AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030', Logins: { 'graph.facebook.com': response.authResponse.accessToken } }); console.log('You are now logged in.'); } else { console.log('There was a problem logging you in.'); } });

擷取 Amazon Cognito 身分

如果您要允許未驗證的使用者,可以立即為您的最終使用者擷取唯一 Amazon Cognito 識別符 (身分 ID),或者如果您要驗證使用者,可以在憑證供應商中設定登入權杖之後,擷取身分 ID:

var identityId = AWS.config.credentials.identityId;

您可以使用 Amazon Cognito 向應用程式提供臨時、有限權限的登入資料,以便您的使用者可以存取 AWS 資源。Amazon Cognito 可支援已驗證和未驗證的身分。要為您的應用提供 AWS 憑據,請按照以下步驟操作。

AWS SDK for Unity 現在是 AWS SDK for .NET 的一部分。若要在中開始使用 Amazon Cognito AWS SDK for .NET,請參閱開 AWS SDK for .NET 發人員指南中的 Amazon Cognito 登入資料供應商。或者,請參閱 Amplify 開發人員中心以 AWS Amplify取得建置應用程式的選項。

擷取 Amazon Cognito 身分

如果您要允許未驗證的使用者,可以立即為您的最終使用者擷取唯一 Amazon Cognito 識別符 (身分 ID),或者如果您要驗證使用者,可以在憑證供應商中設定登入權杖之後,擷取身分 ID:

credentials.GetIdentityIdAsync(delegate(AmazonCognitoIdentityResult<string> result) { if (result.Exception != null) { //Exception! } string identityId = result.Response; });

您可以使用 Amazon Cognito 向應用程式交付有限權限的臨時登入資料,以便您的使用者可以存取 AWS 資源。Amazon Cognito 可支援已驗證和未驗證的身分。要為您的應用提供 AWS 憑據,請按照以下步驟操作。

AWS SDK for Xamarin 現在是 AWS SDK for .NET 的一部分。若要在中開始使用 Amazon Cognito AWS SDK for .NET,請參閱開 AWS SDK for .NET 發人員指南中的 Amazon Cognito 登入資料供應商。或者,請參閱 Amplify 開發人員中心以 AWS Amplify取得建置應用程式的選項。

注意

備註:如果您是在 2015 年 2 月之前建立身分集區,則需要將您的角色與身分集區重新建立關聯,以便使用此建構函數,而不需要將角色做為參數。若要執行此作業,請開啟 Amazon Cognito 主控台,選擇 Manage identity pools (管理身分集區),選取您的身分集區,然後選擇 Edit identity Pool (編輯身分集區),指定您的已驗證和未驗證角色,然後儲存變更。

擷取 Amazon Cognito 身分

如果您要允許未驗證的使用者,可以立即為您的最終使用者擷取唯一 Amazon Cognito 識別符 (身分 ID),或者如果您要驗證使用者,可以在憑證供應商中設定登入權杖之後,擷取身分 ID:

var identityId = await credentials.GetIdentityIdAsync();