You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:06:02