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

如何在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公钥文件,仅需公钥即可完成验签,不要泄露私钥文件

具体实现步骤

  1. AdonisJS侧依赖准备
    安装官方Auth包的JWT能力,AdonisJS v5/v6直接使用内置的@adonisjs/auth包即可,无需额外第三方依赖。
  2. 配置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一致
}
  1. 自定义载荷匹配逻辑
    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)
  }
}
  1. 接口鉴权使用
    直接将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:24:05