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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:14:51