如何设计对接React/JS前端的Python后端API?含GitHub OAuth与AWS集成
解决方案
1. 绝对别让前端传GitHub令牌给后端
把GitHub的access token暴露在前端或者传递给后端是严重的安全风险——任何拿到这个令牌的人都能以用户身份调用GitHub API,删仓库、改账号设置都不在话下,完全违反OAuth的安全设计逻辑。
2. 走正确的GitHub OAuth授权流程
你得用授权码流程,步骤是这样的:
- 前端引导用户跳转到GitHub的授权页,用户确认授权后,GitHub会给前端返回一个授权码(code)
- 前端只把这个
code传给Flask后端,全程别碰token - 后端拿着这个
code,加上你在GitHub注册OAuth应用时拿到的Client ID和Client Secret,去GitHub换真正的access token - 换完token后,后端调用GitHub的
/user接口,拿到用户的唯一标识(比如id或者login字段,这个是用户的固定标识)
3. 后端自己管理用户会话识别
拿到用户的唯一标识后,后端要生成自己的会话凭证,别依赖GitHub的token:
- 简单方案用Flask自带的
session:把用户ID存到session里,Flask会自动做签名加密,前端每次请求会自动携带cookie,后端直接从session里取用户ID就行 - 要是前后端完全分离(比如前端是纯静态部署),就生成JWT令牌,把用户ID塞进去返回给前端,前端存在localStorage或者cookie里,之后每次请求都在请求头里带
Authorization: Bearer <你的JWT>,后端验证签名后就能解析出用户ID
4. 数据持久化靠数据库实现
- 在Heroku上搭个PostgreSQL数据库(Heroku自带免费额度),建个用户表,存储GitHub用户的唯一标识、昵称这些基础信息
- 用户用你的服务创建AWS Lambda/EC2资源后,把资源的信息(比如Lambda函数名、EC2实例ID)和用户ID关联起来存在业务表中
- 之后用户再请求数据时,后端先通过会话凭证拿到用户ID,直接去数据库查询这个用户对应的所有AWS资源,返回给前端即可
内容的提问来源于stack exchange,提问作者Winston
相关产品推荐
相关产品推荐

