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

使用Next-auth集成Azure AD B2C登录遇OPError:404 Not Found求助

问题:Next-auth集成Azure AD B2C登录触发signIn时出现404错误

我正尝试按照Next-auth官方文档集成Azure AD B2C登录并搭配Prisma适配器,但点击登录按钮触发signIn时出现错误。

错误信息

https://next-auth.js.org/errors#signin_oauth_error expected 200 OK, got: 404 Not Found {
  error: {
    message: 'expected 200 OK, got: 404 Not Found',
    stack: 'OPError: expected 200 OK, got: 404 Not Found\n' +
      '    at processResponse (/home/leokorr/Projects/app-tests/microsoft-test/node_modules/openid-client/lib/helpers/process_response.js:41:11)\n' +
      '    at Function.discover (/home/leokorr/Projects/app-tests/microsoft-test/node_modules/openid-client/lib/issuer.js:152:20)\n' +
      '    at processTicksAndRejections (node:internal/process/task_queues:96:5)\n' +
      '    at async openidClient (/home/leokorr/Projects/app-tests/microsoft-test/node_modules/next-auth/core/lib/oauth/client.js:16:14)\n' +
      '    at async getAuthorizationUrl (/home/leokorr/Projects/app-tests/microsoft-test/node_modules/next-auth/core/lib/oauth/authorization-url.js:65:18)\n' +
      '    at async Object.signin (/home/leokorr/Projects/app-tests/microsoft-test/node_modules/next-auth/core/routes/signin.js:37:24)\n' +
      '    at async NextAuthHandler (/home/leokorr/Projects/app-tests/microsoft-test/node_modules/next-auth/core/index.js:238:26)\n' +
      '    at async NextAuthNextHandler (/home/leokorr/Projects/app-tests/microsoft-test/node_modules/next-auth/next/index.js:23:19)\n' +
      '    at async /home/leokorr/Projects/app-tests/microsoft-test/node_modules/next-auth/next/index.js:59:32\n' +
      '    at async Object.apiResolver (/home/leokorr/Projects/app-tests/microsoft-test/node_modules/next/dist/server/api-utils/node.js:366:9)',
    name: 'OPError'
  },
  providerId: 'azure-ad-b2c',
  message: 'expected 200 OK, got: 404 Not Found'
}

相关代码

[...nextauth.js]

import NextAuth from "next-auth"
import AzureADB2CProvider from "next-auth/providers/azure-ad-b2c"
import { PrismaAdapter } from "@next-auth/prisma-adapter"
import { PrismaClient } from "@prisma/client"

const prisma = new PrismaClient()

export default NextAuth({
  adapter: PrismaAdapter(prisma),
  providers: [
    AzureADB2CProvider({
      tenantId: process.env.AZURE_AD_TENANT_ID,
      clientId: process.env.AZURE_AD_CLIENT_ID,
      clientSecret: process.env.AZURE_AD_CLIENT_SECRET,
      primaryUserFlow: process.env.AZURE_AD_B2C_PRIMARY_USER_FLOW,
      authorization: { params: { scope: "offline_access openid" } },
    })
  ],
})

index.js

import { signIn } from 'next-auth/react'

export default function Home() {
  const handleLoginb2c = () => signIn('azure-ad-b2c', {
    callbackUrl: `http://localhost:3000/loggedin`,
  }).catch((error) => console.log(error))

  return (
    <div>
      <button onClick={handleLoginb2c}>b2c Log in</button>
    </div>
  );
}

解决方案

  • 核对Azure AD B2C核心配置参数

    • 确认tenantId为完整的B2C租户标识,格式应为{租户名称}.onmicrosoft.com或租户GUID,不能只填租户名称前缀
    • 检查primaryUserFlow的拼写和大小写,必须与Azure门户中创建的用户流名称完全一致(例如B2C_1_signupsignin)
  • 验证Azure应用注册配置

    • 确保应用注册中已启用「ID令牌」(用于隐式授权流程),并将重定向URI设置为http://localhost:3000/api/auth/callback/azure-ad-b2c(本地开发环境)
    • 确认clientSecret是从Azure门户中正确生成并复制的,避免包含多余空格或特殊字符
  • 检查OpenID发现端点可用性
    Next-auth会自动构造OpenID发现端点,格式为https://{tenantId}.b2clogin.com/{tenantId}.onmicrosoft.com/{primaryUserFlow}/v2.0/.well-known/openid-configuration,直接在浏览器访问该地址:

    • 若返回404,说明tenantId或primaryUserFlow配置错误
    • 若返回正常JSON,说明端点可用,需排查其他问题
  • 确认环境变量加载正常
    在[...nextauth.js]中临时添加日志打印(如console.log(process.env.AZURE_AD_TENANT_ID)),确认所有环境变量已正确加载,没有为空或取值错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:31:16