我正在开发一个 Nextjs (应用程序路由器)应用程序,我正在使用 next-auth。我已将 Azure AD B2C 集成为身份验证提供商

问题描述 投票:0回答:1

我根据 next-auth 文档配置了我的应用程序,但是当我尝试路由到登录页面并进行身份验证时,我在网址上收到此 next-auth 错误 - “https://next-auth.js.org/errors#登录_oauth_错误”。

enter image description here

当我检查我的终端时,我得到有关错误的更多详细信息,如下所示:

这是堆栈跟踪:

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 (webpack-internal:///(rsc)/./node_modules/.pnpm/[email protected]/node_modules/openid-client/lib/helpers/process_response.js:37:15)\n' +        
      '    at Issuer.discover (webpack-internal:///(rsc)/./node_modules/.pnpm/[email protected]/node_modules/openid-client/lib/issuer.js:142:22)\n' +
      '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
      '    at async openidClient (webpack-internal:///(rsc)/./node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/next-auth/core/lib/oauth/client.js:12:18)\n' +
      '    at async getAuthorizationUrl (webpack-internal:///(rsc)/./node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/next-auth/core/lib/oauth/authorization-url.js:88:20)\n' +
      '    at async Object.signin (webpack-internal:///(rsc)/./node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/next-auth/core/routes/signin.js:21:30)\n' +
      '    at async AuthHandler (webpack-internal:///(rsc)/./node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/next-auth/core/index.js:259:36)\n' +
      '    at async NextAuthRouteHandler (webpack-internal:///(rsc)/./node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/next-auth/next/index.js:50:30)\n' +
      '    at async NextAuth._args$ (webpack-internal:///(rsc)/./node_modules/.pnpm/[email protected][email protected][email protected][email protected]/node_modules/next-auth/next/index.js:85:24)\n' +
      '    at async D:\\PhpstormProjects\\AlternateLtd\\moti\\moti-frontend\\node_modules\\.pnpm\\[email protected][email protected][email protected]\\node_modules\\next\\dist\\compiled\\next-server\\app-route.runtime.dev.js:6:62499',
    name: 'OPError'
  },
  providerId: 'azure-ad-b2c',
  message: 'expected 200 OK,

套餐版本:

“下一个”:“13.5.5”, “下一个验证”:“^4.24.6”,

这是我的代码片段。

api\auth\[...nextauth]\route.ts

import NextAuth from "next-auth";
import AzureADB2CProvider from "next-auth/providers/azure-ad-b2c";

if (
  !process.env.AZURE_B2C_TENANT_ID ||
  !process.env.AZURE_B2C_TENANT_NAME ||
  !process.env.AZURE_B2C_CLIENT_ID ||
  !process.env.AZURE_B2C_CLIENT_SECRET ||
  !process.env.AZURE_B2C_PRIMARY_USER_FLOW ||
  !process.env.NEXT_AUTH_SECRET
) {
  throw new Error("Auth required env variables are not set");
}

export const authOptions = {
  providers: [
    AzureADB2CProvider({
      tenantId: process.env.AZURE_AD_B2C_TENANT_NAME as string,
      clientId: process.env.AZURE_B2C_CLIENT_ID as string,
      clientSecret: process.env.AZURE_B2C_CLIENT_SECRET as string,
      primaryUserFlow: process.env.AZURE_B2C_PRIMARY_USER_FLOW as string,
      authorization: { params: { scope: "offline_access openid" } },
      checks: ["pkce"],
      client: {
        token_endpoint_auth_method: "none",
      },
    }),
  ],
  secret: process.env.NEXT_AUTH_SECRET,
};

export const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };
next.js azure-ad-b2c next-auth
1个回答
0
投票

为了让下一个身份验证正确导航到 Azure AD B2C 登录/注册表单,我必须向 AzureADB2CProvider 添加一个“wellKnown”属性,它起作用了

为了获得这个众所周知的财产,

  1. 导航到 Azure > Azure AD B2C > 用户流,
  2. 选择您的用户流程,对于我的情况是 B2C_1_Signup_SignIn,单击“运行用户流程”,

  1. 会弹出一个抽屉,右下角有一个链接,复制并粘贴它并将其添加到您的AzureADB2CProvider选项中,如下所示:

  1. 将上面的链接添加到route.ts中的AzureADB2CProviders选项,如下面的代码片段所示:
providers: [
    AzureADB2CProvider({
      ...,
      wellKnown: https://${process.env.AZURE_B2C_TENANT_NAME}.b2clogin.com/${process.env.AZURE_B2C_TENANT_NAME}.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=${process.env.AZURE_B2C_PRIMARY_USER_FLOW},
     ...
        }),]
© www.soinside.com 2019 - 2024. All rights reserved.