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

在Next.js中通过NextAuth.js自定义提供者传递code至Token端点

解决NextAuth.js自定义OAuth提供者转发code到Token端点的问题

首先明确:NextAuth.js默认会自动处理code到token的交换流程——当用户携带code回调到你的应用时,框架会自动提取code参数,按照OAuth 2.0规范向你配置的token.url发送POST请求,请求体包含code、client_id、client_secret、redirect_uri等必要参数,所以你当前的配置其实已经在转发code了。

如果需要自定义转发逻辑(比如添加额外参数、修改请求规则),可以在token配置中添加request函数手动控制:

{
  id: "myauth",
  name: "myauthname",
  type: "oauth",
  clientId: "nextjs-client",
  clientSecret: "dummy-secret",
  authorization: {
    url: "http://localhost:8087/token-mediator/oauth/authorize",
    params: { scope: "openid email profile" }
  },
  token: {
    url: "http://localhost:8087/token-mediator/oauth/token",
    // 自定义token请求逻辑,确保code被转发
    async request({ params, client, provider }) {
      // 提取回调URL中的code参数
      const { code } = params;
      // 按OAuth规范构造请求体
      const response = await fetch(provider.token.url, {
        method: "POST",
        headers: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
        body: new URLSearchParams({
          code: code,
          client_id: client.clientId,
          client_secret: client.clientSecret,
          redirect_uri: provider.callbackUrl, // 必须与OAuth服务器配置的回调地址一致
          grant_type: "authorization_code" // 授权码模式必填参数
        })
      });
      // 解析并返回token响应
      const data = await response.json();
      return { tokens: data };
    }
  }
}

关键细节:

  • params参数包含回调URL的所有查询参数,其中就有需要的code;
  • provider.callbackUrl是NextAuth自动生成的回调地址,必须和你在OAuth服务端配置的回调地址完全匹配;
  • 请求的Content-Type必须设为application/x-www-form-urlencoded,这是OAuth token端点的标准要求;
  • 若Token端点需要额外参数,直接添加到URLSearchParams中即可。

内容的提问来源于stack exchange,提问作者Katlock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:11:09