本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
取得憑證
您可以使用 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 主控台
Web 身分憑證提供者是 AWS SDK 中預設憑證提供者鏈結的一部分。若要在 AWS
SDK 的本機config
檔案中設定您的身分識別集區權杖 AWS CLI,或新增設定web_identity_token_file
檔項目。請參閱 AWS SDK 和工具參考指南中的假設角色憑證提供者。
若要了解有關如何在 SDK 中填入 Web 身分憑證的更多信息,請參閱 SDK 開發人員指南。若要取得最佳結果,請使用內建的身分識別集區整合開始您的專案 AWS Amplify。
AWS 使用身分集區取得及設定認證的 SDK 資源
-
《Amplify 開發人員中心》中的身分池聯合
(Android) -
《Amplify 開發人員中心》中的身分池聯合
(iOS) -
在 AWS SDK for JavaScript 開發人員指南中使用 Amazon Cognito 身分驗證使用者
-
AWS SDK for .NET 開發人員指南中的 Amazon Cognito 登入資料供應商
-
在 AWS SDK for Go 開發人員指南中以程式設計方式
-
在 AWS SDK for Java 2.x 開發人員指南中的程式碼中提供臨時認證
-
assumeRoleWithWebIdentityCredentialProvider AWS SDK for PHP 開發人員指南中的提供者
-
在 AWS SDK for Python (Boto3) 文件中使用 Web 身分提供者指派角色
-
在 適用於 Rust 的 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)開始,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 主控台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.login
Facebook 開發套件的
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 開發人員中心
擷取 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 開發人員中心
注意
備註:如果您是在 2015 年 2 月之前建立身分集區,則需要將您的角色與身分集區重新建立關聯,以便使用此建構函數,而不需要將角色做為參數。若要執行此作業,請開啟 Amazon Cognito 主控台
擷取 Amazon Cognito 身分
如果您要允許未驗證的使用者,可以立即為您的最終使用者擷取唯一 Amazon Cognito 識別符 (身分 ID),或者如果您要驗證使用者,可以在憑證供應商中設定登入權杖之後,擷取身分 ID:
var identityId = await credentials.GetIdentityIdAsync();