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

AWS Amplify Cognito调用Auth.signOut全局登出报令牌缺少所需scope

问题产生原因

调用Auth.signOut({ global: true })抛出Token does not have required scopes错误,核心原因是全局登出逻辑调用的AWS Cognito GlobalSignOut接口,要求请求携带的访问令牌必须携带aws.cognito.signin.user.admin scope,你虽然在配置中添加了该权限,但通常是以下几个疏漏导致校验失败:

  • 仅在Cognito用户池的scope列表中添加了该权限,没有将其关联到当前项目使用的App客户端,客户端无权申请该scope
  • 配置修改后没有让用户重新登录,本地存储的访问令牌是配置修改前签发的,本身不包含新增的scope,Cognito不会为已签发的令牌追加权限
  • 如果使用Cognito托管UI/OAuth流程登录,Amplify初始化配置的OAuth scope列表中没有显式声明申请aws.cognito.signin.user.admin,登录流程没有请求该权限,签发的令牌自然不携带对应scope
  • Amplify本地缓存了旧的令牌文件,没有拉取最新签发的带权限的令牌
修复方案

按照以下步骤逐一排查修复即可:

  1. 校验Cognito控制台配置
    进入对应Cognito用户池,找到你项目绑定的App客户端配置页,在允许的权限scope列表中,确认aws.cognito.signin.user.admin已经勾选授权给当前客户端。
    如果使用托管UI登录,需要同步修改Amplify初始化配置,在OAuth的scopes数组中显式加入该权限,示例配置:
    import { Auth } from 'aws-amplify';
    
    Auth.configure({
      // 其余Cognito配置项保持不变
      oauth: {
        // 其余OAuth配置(域名、回调地址等)保持不变
        scopes: [
          'openid',
          'email',
          'aws.cognito.signin.user.admin' // 必须显式声明申请该scope
        ]
      }
    });
    
  2. 清除旧令牌缓存,重新登录获取新凭证
    所有配置修改完成后,先清除本地存储的旧令牌(注意这一步不要传global参数,避免再次触发权限报错):
    // 仅清除本地缓存,不调用服务端全局登出接口
    await Auth.signOut();
    
    清除完成后引导用户重新走登录流程,新签发的访问令牌就会携带要求的scope。
  3. 权限校验
    重新登录后可以解析当前会话的Access Token payload,确认scope字段包含aws.cognito.signin.user.admin,之后再调用Auth.signOut({ global: true })即可正常执行全局登出,撤销该用户所有会话的有效令牌。

补充说明:如果你的业务不需要强制撤销用户所有设备的登录态,直接调用无参数的Auth.signOut()即可,该方法只会清除当前端本地存储的令牌,不需要申请额外scope,不会触发该权限错误。


内容的提问来源于stack exchange,提问作者ambigus9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:39:15