获取凭证 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

获取凭证

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

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

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

注意

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

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

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

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

以下各节提供了一些旧版 Amazon SDK 中的示例代码。

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

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

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

要在 iOS 应用程序中使用 Amazon Cognito 身份池,请进行设置。 Amazon 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 为您的应用程序提供临时的、有限权限的证书,以便您的用户可以访问资源。 Amazon Amazon Cognito 同时支持经过身份验证和未经身份验证的身份。要为您的应用程序提供 Amazon 凭证,请按照以下步骤操作。

要在 iOS 应用程序中使用 Amazon Cognito 身份池,请进行设置。 Amazon 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 是您的身份提供商之一,则您可以使用来自 Facebook 软件开发工具包FB.login 函数获取身份提供商令牌:

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

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

检索 Amazon Cognito 身份

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

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

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

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

注意

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

检索 Amazon Cognito 身份

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

var identityId = await credentials.GetIdentityIdAsync();