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

如何使用Python从redirect URI中提取AWS Cognito返回的code参数

Python提取AWS Cognito回调URL授权code实现方案

使用Python标准库urllib.parse即可完成参数提取,无需安装第三方依赖,兼容Cognito授权码流程所有回调场景。

核心实现代码

直接传入完整回调URL字符串,就能提取到code参数值:

from urllib.parse import urlparse, parse_qs

def get_auth_code_from_callback(callback_url: str) -> str | None:
    # 解析URL结构
    parsed_url = urlparse(callback_url)
    # 解析URL查询参数,parse_qs默认返回值为列表类型
    query_params = parse_qs(parsed_url.query)
    # 取code参数第一个值,参数不存在时返回None
    return query_params.get("code", [None])[0]

# 测试示例URL
if __name__ == "__main__":
    demo_url = "https://example.com/callback?code=XXXX-XXXXX-XXXXXXX-XXXXX"
    code = get_auth_code_from_callback(demo_url)
    print(code)
    # 输出:XXXX-XXXXX-XXXXXXX-XXXXX

注意事项

  • 不要用字符串切片、正则匹配的硬编码方式提取参数:Cognito回调在正常流程外还可能携带state校验参数,授权失败时会携带error、error_description参数,硬编码提取很容易出现兼容问题。
  • 提取code前要先做异常判断:如果URL中不存在code字段,要优先读取错误参数处理授权失败场景(比如用户取消授权、回调地址不匹配等问题)。
  • 拿到有效code后,直接向Cognito用户池域名的/oauth2/token端点发起POST请求即可换取access key,请求时需携带配置的客户端凭证,配置了客户端密钥的场景需要按规范做HTTP Basic认证。

Web框架场景简化写法

如果你是用后端Web服务接收回调请求,不需要手动解析完整URL,框架自带的请求对象可以直接读取查询参数:

  • Flask示例
from flask import request

@app.route("/callback")
def cognito_callback():
    auth_code = request.args.get("code")
    if not auth_code:
        err = request.args.get("error", "未知授权错误")
        return f"授权失败:{err}", 400
    # 执行换取token逻辑
    return "授权成功"
  • FastAPI示例
from fastapi import Request

@app.get("/callback")
async def cognito_callback(request: Request):
    auth_code = request.query_params.get("code")
    if not auth_code:
        err = request.query_params.get("error", "未知授权错误")
        return {"status": "error", "msg": f"授权失败:{err}"}
    # 执行换取token逻辑
    return {"status": "success", "code": auth_code}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:21:40