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

如何从Flask/Python调用带JWT授权的AWS API Gateway端点?

如何从Flask/Python调用带JWT认证的AWS API Gateway端点

因为你的API Gateway配置了JWT授权,调用时需要携带Cognito颁发的Access Token作为身份凭证,以下是具体实现步骤:

1. 获取用户的Cognito Access Token

通过flask-cognito-lib,用户登录后库会自动管理令牌的存储和验证。你可以通过auth.current_token()方法获取当前有效的Token对象,从中提取Access Token:

# 基于你已初始化的auth对象(示例代码中已创建)
token = auth.current_token()
access_token = token.access_token if token else None

2. 构造请求并携带JWT令牌

使用requests库发送HTTP请求,在请求头中添加Authorization: Bearer <access_token>,以下是在Flask路由中调用API的完整示例:

from flask import jsonify
import requests

# 受保护路由,仅登录用户可访问
@app.route("/invoke-lambda-api")
@auth_required()
def invoke_lambda_api():
    # 获取当前用户的有效Access Token
    token = auth.current_token()
    if not token:
        return jsonify({"error": "无有效访问令牌"}), 401

    # 替换为你的API Gateway实际端点URL
    api_gateway_url = "https://<endpoint ID>.execute-api.<region>.amazonaws.com/default/<endpoint-name>"
    
    # 构造请求头,携带JWT令牌
    headers = {
        "Authorization": f"Bearer {token.access_token}",
        "Content-Type": "application/json"  # 根据API需求调整内容类型
    }

    # 发送请求(示例为GET,可根据API需求改为POST/PUT等)
    try:
        response = requests.get(api_gateway_url, headers=headers)
        response.raise_for_status()  # 捕获HTTP错误状态码
        return jsonify({"data": response.json()})
    except requests.exceptions.RequestException as e:
        status_code = response.status_code if 'response' in locals() else 500
        return jsonify({"error": f"API调用失败: {str(e)}"}), status_code

关键注意事项

  • 安装依赖:确保已安装requests库,执行pip install requests
  • 令牌有效期:Cognito Access Token默认有效期为1小时,flask-cognito-lib会自动处理令牌刷新(若配置了Refresh Token),无需手动干预
  • 权限验证:确认Cognito用户的令牌包含API Gateway授权器要求的声明(如用户组、audience等),否则会返回403/401错误
  • CORS问题:你的API Gateway未启用CORS,但如果是Flask后端直接调用API(而非前端浏览器),则不受CORS限制;若需前端调用,需在API Gateway配置中开启CORS并允许对应的Origin

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:27:46