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

Python中如何实现用户登录并调用Amplify GraphQL端点

Python3.9+环境下通过邮箱密码登录发起Amplify GraphQL查询实现

前置说明

你搜到的大部分示例都是基于IAM鉴权的服务端调用场景,需要手动配置AK/SK、签名请求,和普通用户用邮箱密码登录的Cognito用户池鉴权逻辑完全不同,不需要走那套复杂流程。
整个实现逻辑只有两步:

  1. 用邮箱、密码对接Amplify背后的Cognito用户池完成登录,获取有效身份ID令牌
  2. 把令牌放到请求头里,直接用requests向GraphQL端点发POST请求即可

依赖安装

在JupyterLab环境中先安装需要的第三方库,不用装全套AWS SDK或者Amplify CLI:

pip install requests pycognito

pycognito封装了Cognito登录的SRP加密校验逻辑,不用自己手写复杂的签名计算,适合数据分析场景快速使用。

可直接复用的代码

先从你所用Amplify项目的aws-exports.js配置文件里抄三个固定参数:用户池ID、Web端应用客户端ID、GraphQL API端点,替换代码里的对应占位符即可。

import requests
import getpass
from pycognito import Cognito

# ========== 替换为你自己的Amplify配置 ==========
USER_POOL_ID = "替换为aws_user_pools_id对应值"
APP_CLIENT_ID = "替换为aws_user_pools_web_client_id对应值"
GRAPHQL_ENDPOINT = "替换为aws_appsync_graphqlEndpoint对应值"
USER_EMAIL = "替换为你的登录邮箱"
# 用getpass隐式输入密码,避免明文存在Notebook里造成泄露
USER_PASSWORD = getpass.getpass("请输入登录密码:")
# ==============================================

def get_auth_token() -> str:
    """通过账号密码登录,获取Amplify GraphQL认可的鉴权令牌"""
    cognito_user = Cognito(USER_POOL_ID, APP_CLIENT_ID, username=USER_EMAIL)
    cognito_user.authenticate(password=USER_PASSWORD)
    return cognito_user.id_token

def gql_query(query: str, variables: dict = None) -> dict:
    """发起GraphQL查询/变更请求"""
    auth_headers = {
        "Authorization": get_auth_token(),
        "Content-Type": "application/json"
    }
    request_body = {
        "query": query,
        "variables": variables or {}
    }
    resp = requests.post(GRAPHQL_ENDPOINT, json=request_body, headers=auth_headers)
    resp.raise_for_status()
    return resp.json()

# 测试调用
if __name__ == "__main__":
    # 替换为你要执行的GraphQL语句
    demo_query = """
    query ListData {
        listYourModelName(limit: 20) {
            items {
                id
                field1
                field2
                createdAt
            }
        }
    }
    """
    result = gql_query(demo_query)
    print(result)

使用注意事项

  • 确保你使用的Cognito应用客户端没有开启客户端密钥校验,Amplify默认生成的Web端客户端默认关闭该配置,如果是自定义开启的客户端,初始化Cognito对象时额外传入client_secret参数即可。
  • Cognito返回的ID令牌默认有效期1小时,长时间跑批量分析任务时,可以直接用pycognito自带的check_token()方法自动判断令牌是否过期、自动刷新,不用重复手动输密码。
  • 只要你的账号本身已经被配置了对应GraphQL API的读取权限,返回结果和你在Web端用Amplify前端应用登录查询到的结果完全一致,不需要额外申请AWS控制台权限、不需要手动抓包拿凭证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:57:21