获取凭证 - Amazon Cognito

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

获取凭证

您可以使用 Amazon Cognito 为您的应用程序提供临时的、权限有限的证书,以便您的用户可以访问资源。 AWS 本部分介绍如何获取凭证以及如何从身份池检索 Amazon Cognito 身份。

Amazon Cognito 同时支持经过身份验证和未经身份验证的身份。未经身份验证的用户的身份未经过验证,因此,该角色很适合您的应用程序的来宾用户或用户身份验证与否无关紧要的情形。经过身份验证的用户可以通过第三方身份提供商或证实其身份的用户池登录到您的应用程序。确保您的资源的权限范围适当,让未经身份验证的用户无权访问这些资源。

Amazon Cognito 身份并不是凭证。使用 AWS Security Token Service (AWS STS) 中的 Web 联合身份验证支持将它们交换为凭证。建议使用 AWS.CognitoIdentityCredentials 来为您的应用程序用户获得 AWS 凭证。然后使用将凭证对象中的身份交换为证书 AWS STS。

注意

如果您的身份池是在 2015 年 2 月前创建的,则必须将角色与身份池重新关联,以便在没有角色作为参数的情况下使用 AWS.CognitoIdentityCredentials 构造函数。为此,请打开 Amazon Cognito 控制台,选择 Manage identity pools(管理身份池)、选择您的身份池,然后选择 Edit identity Pool(编辑身份池),指定您的经过身份验证的角色和未经身份验证的角色,然后保存更改。

Web 身份凭证提供者是中默认凭证提供者链的一部分。 AWS SDKs要在本地config文件中为 AWS SDK或设置身份池令牌 AWS CLI,请添加web_identity_token_file个人资料条目。请参阅《工具参考指南》 AWS SDKs和《工具参考指南》中的代入角色凭证提供者

要详细了解如何在中填充 Web 身份凭证SDK,请参阅SDK开发者指南。为了获得最佳效果,请使用内置的身份池集成开始您的项目 AWS Amplify。

AWS SDK用于通过身份池获取和设置凭证的资源

以下各节提供了一些旧版的示例代码 AWS SDKs。

您可以使用 Amazon Cognito 为您的应用程序提供临时的、权限有限的证书,以便您的用户可以访问资源。 AWS Amazon Cognito 同时支持经过身份验证和未经身份验证的身份。要为您的应用程序提供 AWS 凭证,请按照以下步骤操作。

要在安卓应用程序中使用 Amazon Cognito 身份池,请进行设置。 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(第 11 API 级)开始,NetworkOnMainThreadException如果您在主应用程序线程上执行网络 I/O,您的应用程序将自动失败并抛出。您必须使用 AsyncTask 将您的代码移至后台线程。有关更多信息,请参阅 Android 文档。您也可以调用 getCachedIdentityId() 以检索 ID,但前提是已缓存在本地。否则,该方法将返回 null 值。

您可以使用 Amazon Cognito 为您的应用程序提供临时的、权限有限的证书,以便您的用户可以访问资源。 AWS Amazon Cognito 身份池同时支持经过身份验证和未经身份验证的身份。要为您的应用程序提供 AWS 凭证,请完成以下步骤。

要在 iOS 应用程序中使用 Amazon Cognito 身份池,请进行设置。 AWS Amplify有关更多信息,请参阅《Amplify 开发中心》中的 Swift 身份验证Flutter 身份验证

检索 Amazon Cognito 身份

如果您允许未经身份验证的用户或者已设置完凭证提供程序中的登录令牌(如果您正在对用户进行身份验证),则可以立即检索终端用户的唯一 Amazon Cognito 标识符(身份 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):

// 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 参考资料。

如果您尚未创建身份池,则在使用 AWS.CognitoIdentityCredentials 之前,先在 Amazon Cognito 控制台中创建一个身份池。

通过您的身份提供商配置身份池后,您可以使用 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 是你的身份提供者之一,你可以使用 FacebookFB.login功能SDK来获取身份提供者令牌:

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):

var identityId = AWS.config.credentials.identityId;

您可以使用 Amazon Cognito 为您的应用程序提供临时的、权限有限的证书,以便您的用户可以访问资源。 AWS Amazon Cognito 同时支持经过身份验证和未经身份验证的身份。要为您的应用程序提供 AWS 凭证,请按照以下步骤操作。

fo AWS SDKr Unity 现在是其中的一部分AWS SDK for .NET。要开始使用中的亚马逊 Cognito AWS SDK for .NET,请参阅开发者指南中的亚马逊 Cognito 凭证提供商。 AWS SDK for .NET 或者,请参阅 Amplify 开发者中心,了解用于构建应用程序的选项。 AWS Amplify

检索 Amazon Cognito 身份

如果您允许未经身份验证的用户或者已设置完凭证提供程序中的登录令牌(如果您正在对用户进行身份验证),则可以立即检索终端用户的唯一 Amazon Cognito 标识符(身份 ID):

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

您可以使用 Amazon Cognito 为您的应用程序提供临时的、有限权限的证书,以便您的用户可以访问资源。 AWS Amazon Cognito 同时支持经过身份验证和未经身份验证的身份。要为您的应用程序提供 AWS 凭证,请按照以下步骤操作。

fo AWS SDKr Xamarin 现在是其中的一部分。AWS SDK for .NET要开始使用中的亚马逊 Cognito AWS SDK for .NET,请参阅开发者指南中的亚马逊 Cognito 凭证提供商。 AWS SDK for .NET 或者,请参阅 Amplify 开发者中心,了解用于构建应用程序的选项。 AWS Amplify

注意

注意:如果您在 2015 年 2 月之前创建了身份池,您必须将您的角色与身份池重新关联,才能在没有角色作为参数的情况下使用此构造函数。为此,请打开 Amazon Cognito 控制台,选择 Manage identity pools(管理身份池)、选择您的身份池,然后选择 Edit identity Pool(编辑身份池),指定您的经过身份验证的角色和未经身份验证的角色,然后保存更改。

检索 Amazon Cognito 身份

如果您允许未经身份验证的用户或者已设置完凭证提供程序中的登录令牌(如果您正在对用户进行身份验证),则可以立即检索终端用户的唯一 Amazon Cognito 标识符(身份 ID):

var identityId = await credentials.GetIdentityIdAsync();