Amazon Cognito 憑證提供者 - AWS SDK for .NET

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

Amazon Cognito 憑證提供者

注意

本主題中的資訊專屬於以 .NET 為基礎的專案 架構和 3.3 AWS SDK for .NET 版及更早版本。

Amazon.CognitoIdentity.CognitoAWSCredentials位於 AWSSDK.CognitoIdentity NuGet Word套件中的 是憑證物件,使用 Amazon Cognito 和 AWS Security Token Service (AWS STS) 來擷取憑證以 AWS 撥打電話。

設定 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 物件甚至能提供更多功能。如果您同時使用 AmazonCognitoSyncClientCognitoAWSCredentials,則使用 進行呼叫時,不需要指定 IdentityPoolIdIdentityId 屬性AmazonCognitoSyncClient。這些屬性會自動從 CognitoAWSCredentials 填入。下一個程式碼範例將對此做說明,並且提供一個事件,只要適用於 CognitoAWSCredentialsIdentityId 有變動時就會通知您。在某些情況下,例如從未驗證使用者變更為已驗證使用者時,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 = "..." }); }