本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
获取凭证
您可以使用 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 控制台
Web 身份凭证提供者是中默认凭证提供者链的一部分。 AWS SDKs要在本地config
文件中为 AWS
SDK或设置身份池令牌 AWS CLI,请添加web_identity_token_file
个人资料条目。请参阅《工具参考指南》 AWS SDKs和《工具参考指南》中的代入角色凭证提供者。
要详细了解如何在中填充 Web 身份凭证SDK,请参阅SDK开发者指南。为了获得最佳效果,请使用内置的身份池集成开始您的项目 AWS Amplify。
AWS SDK用于通过身份池获取和设置凭证的资源
-
《Amplify 开发人员中心》的身份池联合身份验证
(Android) -
《Amplify 开发人员中心》的身份池联合身份验证
(iOS) -
开发者指南中的@@ 亚马逊 Cognito 凭证提供商 AWS SDK for .NET
-
在《 AWS SDK for Go 开发者指南》中@@ 以编程方式指定凭证
-
在《 AWS SDK for Java 2.x 开发人员指南》的代码中提供临时证书
-
assumeRoleWithWebIdentityCredentialProvider AWS SDK for PHP 开发者指南中的提供商
-
AWS SDK for Python (Boto3) 文档中的代入 Web 身份提供者的角色
-
在 AWS SDK for Rust 开发者指南中@@ 指定您的凭证和默认区域
以下各节提供了一些旧版的示例代码 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 级)开始,NetworkOnMainThreadExceptionAsyncTask
将您的代码移至后台线程。有关更多信息,请参阅 Android 文档getCachedIdentityId()
以检索 ID,但前提是已缓存在本地。否则,该方法将返回 null 值。
您可以使用 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] 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 开发者中心
检索 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 开发者中心
注意
注意:如果您在 2015 年 2 月之前创建了身份池,您必须将您的角色与身份池重新关联,才能在没有角色作为参数的情况下使用此构造函数。为此,请打开 Amazon Cognito 控制台
检索 Amazon Cognito 身份
如果您允许未经身份验证的用户或者已设置完凭证提供程序中的登录令牌(如果您正在对用户进行身份验证),则可以立即检索终端用户的唯一 Amazon Cognito 标识符(身份 ID):
var identityId = await credentials.GetIdentityIdAsync();