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

AWS Cognito认证后Claims不可见,访问首页提示无Token

问题分析与解决步骤

你的核心问题是:拿到access_token后没有将其存入客户端并在后续请求中携带,导致authentication_required装饰器无法检测到Token。flask_awscognito的认证装饰器默认从请求头的Authorization: Bearer <token>字段读取Token,当前流程中缺少Token传递的关键环节。

具体修复步骤

1. 在回调路由中存储Token到Cookie并跳转首页

修改aws_cognito_redirect路由,将获取到的access_token存入浏览器Cookie,并重定向到首页(后续请求会自动携带Cookie):

@application.route('/aws_cognito_redirect')
def aws_cognito_redirect():
    access_token = aws_auth.get_access_token(request.args)
    # 生成响应并设置Cookie
    response = redirect('/')
    response.set_cookie(
        'access_token',
        access_token,
        max_age=3600,  # 匹配Cognito Token的默认有效期(1小时,可在用户池调整)
        secure=False,  # 本地开发用False,生产环境必须改为True(HTTPS)
        httponly=True,  # 防止XSS攻击窃取Token
        samesite='Lax'  # 限制跨站Cookie传递,提升安全性
    )
    return response

2. 自动将Cookie中的Token注入请求头

添加请求钩子,把Cookie里的access_token自动放到Authorization请求头中,让authentication_required装饰器能识别:

@application.before_request
def inject_token_to_header():
    access_token = request.cookies.get('access_token')
    if access_token and 'Authorization' not in request.headers:
        request.headers['Authorization'] = f'Bearer {access_token}'

3. 可选:添加登出路由(清理Cookie)

如果需要登出功能,可添加路由清除Cookie:

@application.route('/sign_out')
def sign_out():
    response = redirect('/sign_in')
    response.delete_cookie('access_token')
    return response

额外检查项

  • 确认Cognito用户池客户端的回调URL已配置为http://localhost:5000/aws_cognito_redirect,与代码中的AWS_COGNITO_REDIRECT_URL完全一致。
  • 确认用户池客户端使用的是授权码流程(Authorization Code Flow),这是flask_awscognito默认支持的流程。
  • 生产环境部署时,务必启用HTTPS,并将Cookie的secure属性设为True,避免Token明文传输。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:40:41