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

如何验证API的Cognito用户已登录?React前端+Python后端场景

前端向后端发送请求并验证用户登录的方案

一、令牌选择:优先用访问令牌(Access Token)

  • ID令牌:主要用于前端展示用户身份信息(比如用户名、邮箱),它的受众(aud字段)是前端应用,不适合后端API的身份验证。
  • 访问令牌:专门设计用来访问受保护的后端API,受众是你的后端服务,是后端验证用户身份的正确选择。
  • 刷新令牌:仅用于在访问令牌过期时,向Cognito申请新的访问/ID令牌,绝对不能直接发送给后端API。

二、令牌的本质与验证方式

这些令牌都是JWT(JSON Web Token),验证时不需要额外依赖特殊库(基础JWT库即可),常规做法是本地验证,效率远高于远程调用Cognito:

  1. 从你的Cognito用户池公开密钥端点获取公钥(每个用户池对应一组公钥)
  2. 用公钥验证JWT的签名、有效期、受众(aud)、发行方(iss)等核心字段是否合法

Python后端可以用pyjwt+cryptography实现本地验证,示例代码:

import jwt
from jwt import PyJWKClient

def verify_access_token(token, user_pool_id, backend_client_id):
    # 拼接Cognito公钥地址
    region = user_pool_id.split('_')[0]
    jwks_url = f"https://cognito-idp.{region}.amazonaws.com/{user_pool_id}/.well-known/jwks.json"
    jwks_client = PyJWKClient(jwks_url)
    signing_key = jwks_client.get_signing_key_from_jwt(token)
    
    try:
        # 解码并验证令牌
        payload = jwt.decode(
            token,
            signing_key.key,
            algorithms=["RS256"],
            audience=backend_client_id,
            issuer=f"https://cognito-idp.{region}.amazonaws.com/{user_pool_id}"
        )
        return payload  # 验证通过,返回用户身份信息
    except jwt.InvalidTokenError:
        return None  # 令牌无效或已过期

三、用boto3验证用户会话的可行性

可以用boto3调用Cognito的接口验证,但属于远程调用Cognito服务,会增加请求延迟和API调用成本,仅适合对安全性要求极高且能接受性能损耗的场景:

  1. 前端将访问令牌传给后端
  2. 后端调用get_user接口验证令牌有效性

示例代码:

import boto3

# 初始化Cognito客户端
cognito_client = boto3.client('cognito-idp', region_name='你的区域')

def verify_session_via_boto3(access_token):
    try:
        response = cognito_client.get_user(AccessToken=access_token)
        return response  # 返回用户信息,说明会话有效
    except cognito_client.exceptions.NotAuthorizedException:
        return None  # 令牌无效、过期或无权限

四、前端发送请求的完整流程

  • 用户通过amazon-cognito-identity-js登录成功后,获取AccessToken
  • 前端发送API请求时,将访问令牌放在请求头的Authorization字段中,格式为 Bearer <你的Access Token>
  • 后端收到请求后,先提取Authorization头中的令牌,再通过本地JWT验证或boto3远程验证确认身份
  • 验证通过则返回业务数据,验证失败则返回401 Unauthorized状态码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:57:43