本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Cognito 凭证提供程序
注意
本主题中的信息特定于基于 .NET Framework 和 AWS SDK for .NET 3.3 版及更低版本的项目。
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(); }
如果您将 CognitoAWSCredentials
对象与属于AWS SDK for .NET的一部分的 AmazonCognitoSyncClient
结合使用,则该对象会提供更多功能。如果您使用的是 AmazonCognitoSyncClient
和 CognitoAWSCredentials
,则无需在使用 IdentityPoolId
进行调用时指定 IdentityId
和 AmazonCognitoSyncClient
属性。这些属性会自动从 CognitoAWSCredentials
中进行填入。以下代码示例将对此进行说明以及说明每当 IdentityId
的 CognitoAWSCredentials
发生更改时通知您的事件。在某些情况下 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 = "..." }); }