AWS Lambda(Python)中JWT生成报错:找不到RS256算法
解决JWT RS256算法找不到的问题
问题本质
RS256是基于RSA的签名算法,PyJWT库本身只提供JWT核心逻辑,底层加密实现依赖cryptography库。你只安装了PyJWT但缺失这个依赖,或者Lambda部署包未包含它,就会触发该报错。
分步解决方法
1. 补装依赖(本地开发环境)
在项目目录下执行安装命令:
pip install pyjwt cryptography
如果用requirements.txt管理依赖,需将两个包都列进去:
pyjwt>=2.8.0 cryptography>=41.0.0
2. 正确打包Lambda部署包
AWS Lambda不会自动安装依赖,必须将代码和依赖一起打包:
- 新建
package文件夹 - 将依赖安装到该文件夹:
pip install pyjwt cryptography -t package/
- 把你的Lambda代码文件(比如
lambda_function.py)复制到package目录 - 进入
package目录,将所有文件压缩成zip包,再上传到Lambda控制台
3. 代码算法指定验证
确保生成JWT的代码明确指定RS256算法,示例代码如下:
import jwt from datetime import datetime, timedelta def generate_signed_jwt(private_key, key_id, client_email, scopes): payload = { 'iss': client_email, 'scope': ' '.join(scopes), 'aud': 'https://oauth2.googleapis.com/token', 'exp': datetime.utcnow() + timedelta(minutes=60), 'iat': datetime.utcnow() } headers = { 'kid': key_id, 'alg': 'RS256' } return jwt.encode(payload, private_key, algorithm='RS256', headers=headers)
4. 可选:用Lambda层管理依赖
若不想每次打包都带依赖,可创建Lambda层复用:
- 按
python/lib/python3.x/site-packages目录结构安装依赖(x对应Lambda使用的Python版本) - 压缩该目录为zip文件,创建Lambda层并关联到你的函数
额外排查项
- 确认Lambda的Python版本与本地开发版本一致,避免依赖版本不兼容
- 检查
services-account.json里的私钥格式是否正确,必须以-----BEGIN PRIVATE KEY-----开头、-----END PRIVATE KEY-----结尾,中间换行符不能缺失或多余
内容的提问来源于stack exchange,提问作者Anthony Williams
相关产品推荐
相关产品推荐

