本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用用户池进行身份验证
您的应用程序用户可以直接通过用户池登录,也可以通过第三方身份提供商 (IdP) 进行联合。用户池管理处理通过Facebook、谷歌、亚马逊和苹果进行社交登录以及从OpenID Connect(OIDC)和SAML返回的代币的开销。 IdPs
在成功验证身份后,Amazon Cognito 会将用户池令牌返回到您的应用程序。您可以使用这些令牌向您的用户授予对您的服务器端资源或 Amazon API Gateway 的访问权限。或者,您可以将它们交换为访问其他 AWS 服务的 AWS 凭证。
您的 Web 或移动应用程序的用户池令牌处理和管理在客户端上通过 Amazon Cognito SDK 进行。同样的,如果存在有效的(非过期的)刷新令牌,Mobile SDK for iOS 和 Mobile SDK for Android 会自动刷新您的 ID 令牌和访问令牌,而且 ID 令牌和访问令牌剩余有效时间至少有 5 分钟。有关安卓和 iOS 的软件开发工具包和示例代码的信息 JavaScript,请参阅 Amazon Cognito 用户池软件开发工具包。
在您的应用程序用户成功登录后,Amazon Cognito 会创建会话并返回经过身份验证的用户的 ID 令牌、访问令牌和刷新令牌。
- JavaScript
-
// Amazon Cognito creates a session which includes the id, access, and refresh tokens of an authenticated user.
var authenticationData = {
Username : 'username',
Password : 'password',
};
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var poolData = { UserPoolId : 'us-east-1_ExaMPle',
ClientId : '1example23456789'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
Username : 'username',
Pool : userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
var accessToken = result.getAccessToken().getJwtToken();
/* Use the idToken for Logins Map when Federating User Pools with identity pools or when passing through an Authorization Header to an API Gateway Authorizer */
var idToken = result.idToken.jwtToken;
},
onFailure: function(err) {
alert(err);
},
});
- Android
-
// Session is an object of the type CognitoUserSession, and includes the id, access, and refresh tokens for a user.
String idToken = session.getIdToken().getJWTToken();
String accessToken = session.getAccessToken().getJWT();
- iOS - swift
-
// AWSCognitoIdentityUserSession includes id, access, and refresh tokens for a user.
- (AWSTask<AWSCognitoIdentityUserSession *> *)getSession;
- iOS - objective-C
-
// AWSCognitoIdentityUserSession includes the id, access, and refresh tokens for a user.
[[user getSession:@"username" password:@"password" validationData:nil scopes:nil] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserSession *> * _Nonnull task) {
// success, task.result has user session
return nil;
}];