如何在AdonisJS中使用Laravel Passport生成的Token调用通用API
Laravel Passport Token复用于AdonisJS API的实现方案
可行性说明
Laravel Passport默认生成标准JWT格式的授权Token,只要AdonisJS侧配置对应验签规则即可完成复用,不需要修改Laravel侧的现有逻辑。
前置准备
- 确认Laravel Passport使用JWT模式(Passport v9+默认启用,非自定义不透明Token场景都适用)
- 提取Laravel项目下
storage/oauth-public.key公钥文件,仅需公钥即可完成验签,不要泄露私钥文件
具体实现步骤
- AdonisJS侧依赖准备
安装官方Auth包的JWT能力,AdonisJS v5/v6直接使用内置的@adonisjs/auth包即可,无需额外第三方依赖。 - 配置JWT验签规则
将提取的oauth-public.key文件存入AdonisJS项目的app/Keys目录,修改config/auth.ts中的JWT guard配置:
jwt: { driver: 'jwt', publicKey: fs.readFileSync(join(__dirname, '../app/Keys/oauth-public.key'), 'utf-8'), algorithm: 'RS256', // 和Laravel Passport默认签名算法保持一致 issuer: 'your-laravel-app-url', // 和Laravel侧Passport配置的issuer一致 audience: 'your-api-audience', // 和Laravel侧Passport配置的audience一致 }
- 自定义载荷匹配逻辑
Laravel Passport生成的JWT默认携带sub(对应用户ID)、scopes(权限范围)、exp(过期时间)字段,在AdonisJS的auth配置中新增用户解析逻辑,将JWT的sub字段映射到AdonisJS的用户模型ID即可:
// 同config/auth.ts 中jwt guard配置项添加 userProvider: { driver: 'lucid', identifierKey: 'id', uids: [], model: () => import('#models/user'), // 自定义用户查找逻辑 async getUser(payload) { return await User.findOrFail(payload.sub) } }
- 接口鉴权使用
直接将Laravel侧生成的Passport Token带入AdonisJS接口的Authorization请求头,格式为Bearer {your-token},即可正常通过鉴权访问接口。
如果你使用的是Laravel Passport的不透明Token模式,不想切换到JWT,可以用Token自省方案:Laravel侧实现OAuth2标准的introspection校验接口,AdonisJS侧每次收到Token后调用该接口校验有效性,该方案兼容性更高但性能低于直接验签,适合低并发场景。
注意事项
- 两边服务的用户表ID规则需要保持一致,否则会出现JWT解析的用户ID匹配不到AdonisJS侧用户的问题
- 若Laravel侧自定义了Passport的JWT载荷字段,需要同步在AdonisJS侧添加对应字段的校验规则
- Laravel侧更新Passport签名秘钥后,需要同步更新AdonisJS侧的公钥文件
内容的提问来源于stack exchange,提问作者chirag
相关产品推荐
相关产品推荐

