Cognito用户池对应CognitoIdentityCredentials的凭证类及认证方法是什么?
Cognito用户池无Amplify框架认证实现方案
首先明确两个核心概念:
- 你之前看到的
CognitoIdentityCredentials是配合Cognito身份池使用的工具,作用是通过第三方身份(包括用户池身份)兑换AWS服务的临时访问凭证,不属于用户池原生认证的范畴 - 不存在
CognitoUserCredentials这个类,纯用户池认证直接使用amazon-cognito-identity-js包提供的API即可实现,不需要额外依赖aws-sdk的其他类
具体实现步骤
1. 初始化用户池实例
首先用你创建的用户池ID、关联的应用客户端ID初始化用户池对象:
import { CognitoUserPool, AuthenticationDetails, CognitoUser } from 'amazon-cognito-identity-js'; const poolData = { UserPoolId: '<你的Cognito用户池ID>', // 示例:ap-southeast-1_abc123XYZ ClientId: '<用户池关联的应用客户端ID>' // 在用户池控制台「应用程序集成」页可查看 }; const userPool = new CognitoUserPool(poolData);
2. 实现用户名密码登录认证
构造认证参数和用户对象,调用认证方法即可完成登录:
// 组装用户登录凭证 const authData = new AuthenticationDetails({ Username: '<用户登录账号>', Password: '<用户登录密码>' }); // 构造Cognito用户实例 const cognitoUser = new CognitoUser({ Username: '<用户登录账号>', Pool: userPool }); // 发起认证请求 cognitoUser.authenticateUser(authData, { onSuccess: (authResult) => { // 认证成功,可获取三类凭证自行存储使用 const accessToken = authResult.getAccessToken().getJwtToken(); const idToken = authResult.getIdToken().getJwtToken(); const refreshToken = authResult.getRefreshToken().getToken(); // 后续请求后端接口时,把token放到Authorization请求头即可 }, onFailure: (error) => { // 认证失败处理,比如提示密码错误、用户不存在等 console.error('登录失败:', error.message); }, // 按需添加特殊场景回调,比如首次登录强制改密码、MFA二次验证等 newPasswordRequired: (userAttrs, requiredAttrs) => { // 处理强制改密码逻辑 cognitoUser.completeNewPasswordChallenge('<用户设置的新密码>', userAttrs, this); } });
3. 登录态校验(页面刷新后恢复登录态)
用户登录成功后,amazon-cognito-identity-js会默认把加密后的凭证存到浏览器本地存储,可通过以下方法校验登录态:
const currentUser = userPool.getCurrentUser(); if (currentUser) { currentUser.getSession((err, session) => { if (err || !session.isValid()) { // 登录态已失效,跳转登录页 return; } // 登录态有效,可获取token继续业务逻辑 const validIdToken = session.getIdToken().getJwtToken(); }); }
如果你确实需要通过Cognito用户池身份访问AWS云服务,才需要额外创建身份池,把用户池配置为身份池的可信身份提供方,再使用你提到的CognitoIdentityCredentials代码兑换临时凭证,这时候代码中填写的是身份池ID,不能直接替换为用户池ID。
内容的提问来源于stack exchange,提问作者Yang Liu
相关产品推荐
相关产品推荐

