本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Cognito 憑證提供者
注意
本主題中的資訊專屬於以 .NET 為基礎的專案 架構和 3.3 AWS SDK for .NET 版及更早版本。
Amazon.CognitoIdentity.CognitoAWSCredentials
位於 AWSSDK.CognitoIdentity
設定 CognitoAWSCredentials
的第一步是建立「身分集區」。身分集區是您的帳戶專屬的使用者身分資訊存放區。此資訊可跨用戶端平台、裝置和作業系統擷取,因此,如果使用者一開始是在手機上使用您的應用程式,之後再切換到平板電腦,所保存的應用程式資訊仍然可供該使用者使用。您可以從 Amazon Cognito 主控台建立新的身分集區。如果您使用主控台,它還會提供您需要的其他資訊:
-
您的帳號是 12 位數字的號碼,例如 123456789012,是您帳戶專有。
-
未驗證角色 ARN- 未驗證使用者將擔任的角色。例如,此角色可提供您資料的唯讀許可。
-
驗證角色 ARN- 驗證使用者將擔任的角色。此角色可提供您資料更多許可。
設定 CognitoAWSCredentials
下列程式碼範例示範如何設定 CognitoAWSCredentials
,然後您可以使用 來呼叫 Amazon S3 做為未驗證的使用者。這可讓您只使用所需的最少量資料來驗證使用者身分。使用者權限由角色控制,因此您可以依需要設定存取權。
CognitoAWSCredentials credentials = new CognitoAWSCredentials( accountId, // Account number identityPoolId, // Identity pool ID unAuthRoleArn, // Role for unauthenticated users null, // Role for authenticated users, not set region); using (var s3Client = new AmazonS3Client(credentials)) { s3Client.ListBuckets(); }
AWS 使用 作為未驗證的使用者
下列程式碼範例示範如何以未經驗證的使用者 AWS 身分開始使用 ,然後透過 Facebook 進行身分驗證,並更新憑證以使用 Facebook 憑證。使用此方法,您便可已驗證的角色授與不同功能給已驗證身分的使用者。例如您的手機應用程式允許使用者匿名檢視內容,如果使用一或多個設定的提供者身分登入的話,還可讓他們張貼文章。
CognitoAWSCredentials credentials = new CognitoAWSCredentials( accountId, identityPoolId, unAuthRoleArn, // Role for unauthenticated users authRoleArn, // Role for authenticated users region); using (var s3Client = new AmazonS3Client(credentials)) { // Initial use will be unauthenticated s3Client.ListBuckets(); // Authenticate user through Facebook string facebookToken = GetFacebookAuthToken(); // Add Facebook login to credentials. This clears the current AWS credentials // and retrieves new AWS credentials using the authenticated role. credentials.AddLogin("graph.facebook.com", facebookAccessToken); // This call is performed with the authenticated role and credentials s3Client.ListBuckets(); }
如果您使用 AmazonCognitoSyncClient
(屬 AWS SDK for .NET的一部分),CognitoAWSCredentials
物件甚至能提供更多功能。如果您同時使用 AmazonCognitoSyncClient
和 CognitoAWSCredentials
,則使用 進行呼叫時,不需要指定 IdentityPoolId
和 IdentityId
屬性AmazonCognitoSyncClient
。這些屬性會自動從 CognitoAWSCredentials
填入。下一個程式碼範例將對此做說明,並且提供一個事件,只要適用於 CognitoAWSCredentials
的 IdentityId
有變動時就會通知您。在某些情況下,例如從未驗證使用者變更為已驗證使用者時,IdentityId
即可變更。
CognitoAWSCredentials credentials = GetCognitoAWSCredentials(); // Log identity changes credentials.IdentityChangedEvent += (sender, args) => { Console.WriteLine("Identity changed: [{0}] => [{1}]", args.OldIdentityId, args.NewIdentityId); }; using (var syncClient = new AmazonCognitoSyncClient(credentials)) { var result = syncClient.ListRecords(new ListRecordsRequest { DatasetName = datasetName // No need to specify these properties //IdentityId = "...", //IdentityPoolId = "..." }); }