Laravel中$user->createToken('laravel')->accessToken报"Invalid key supplied"问题
解决Serverless环境下Laravel生成令牌报错"Invalid key supplied"的问题
这个问题大概率和Laravel的加密密钥配置或者Passport/Sanctum的密钥加载有关——毕竟EC2环境正常,迁移到Serverless后才出问题,下面是具体排查和解决步骤:
1. 确认APP_KEY是否正确加载
Serverless环境(比如AWS Lambda)不会自动读取本地.env文件,一定要确保:
- 把EC2服务器上的
APP_KEY(可通过php artisan key:show查看)添加到Serverless应用的环境变量中 - 检查部署配置(如
serverless.yml)的environment块是否包含该变量:
environment: APP_KEY: your-ec2-app-key-value
2. 若使用Laravel Passport,检查加密密钥
Passport需要私钥和公钥生成令牌,Serverless环境可能未携带这些文件:
- 在EC2上执行
php artisan passport:keys生成密钥文件,路径为storage/oauth-private.key和storage/oauth-public.key - 要么将这两个文件打包进Serverless部署包,要么把密钥内容存为环境变量:
- 私钥内容存入
PASSPORT_PRIVATE_KEY,公钥存入PASSPORT_PUBLIC_KEY - 在
config/auth.php中修改Passport配置,读取环境变量:
'passport' => [ 'private_key' => env('PASSPORT_PRIVATE_KEY'), 'public_key' => env('PASSPORT_PUBLIC_KEY'), ], - 私钥内容存入
3. 检查存储目录权限
如果Passport尝试在Serverless环境动态生成密钥,Lambda的临时存储目录可能无写入权限:
- 部署时确保
storage目录完整打包 - 或者提前在本地生成密钥再部署,避免动态生成需求
4. 若使用Sanctum,检查配置
如果用Sanctum做令牌生成,注意:
- 确认
SANCTUM_STATEFUL_DOMAINS环境变量包含Serverless应用的域名 - 核心还是要保证APP_KEY正确配置,Sanctum依赖它完成加密
快速验证方法
可以在登录API里临时添加代码输出env('APP_KEY'),对比和EC2上的是否一致;或者查看Serverless日志,获取更详细的错误堆栈,能更快定位问题。
内容的提问来源于stack exchange,提问作者Brindha
相关产品推荐
相关产品推荐

