单租户Entra ID对接@sidebase/nuxt-auth配置报错及方案咨询
问题:@sidebase/nuxt-auth对接Entra ID单租户认证报错AADSTS50194
报错信息:
AADSTS50194: Application 'app guid'(app name) is not configured as a multi-tenant application. Usage of the /common endpoint is not supported for such applications created after '10/15/2018'. Use a tenant-specific endpoint or configure the application to be multi-tenant.
当前配置代码
Auth Handler配置
import { NuxtAuthHandler } from '#auth' import AzureADProvider from "next-auth/providers/azure-ad"; const runtimeConfig = useRuntimeConfig() export default NuxtAuthHandler({ pages: { signIn: '/login' }, secret: runtimeConfig.authSecret, providers: [ AzureADProvider.default({ clientId: runtimeConfig.public.azureAdClientId, clientSecret: runtimeConfig.AzureAdClientSecret, tenantId: runtimeConfig.public.AzureAdTenantId, authorization: { url: `https://login.microsoftonline.com/${runtimeConfig.public.azureAdTenantId}/oauth2/v2.0/authorize`, params: { scope: "openid profile email", } }, token: { url: `https://login.microsoftonline.com/${runtimeConfig.public.azureAdTenantId}/oauth2/v2.0/token` }, }), ], })
nuxt.config.ts中的Auth配置
auth: { isEnabled: true, globalAppMiddleware: true, disableServerSideAuth: false, originEnvKey: 'NUXT_AUTH_ORIGIN', baseURL: 'http://localhost:3000/api/auth', provider: { type: 'authjs', trustHost: false, defaultProvider: 'azure-ad', addDefaultCallbackUrl: true, }, sessionRefresh: { enablePeriodically: true, enableOnWindowFocus: true, } },
Entra ID应用注册概览

提问
针对单租户场景,正确的配置方案是什么?
解决方案:单租户场景下@sidebase/nuxt-auth对接Entra ID的正确配置
报错核心原因是Azure AD Provider仍在默认使用/common多租户端点,即使手动指定了tenantId相关URL,也可能因变量名拼写错误或Provider内部逻辑覆盖导致配置失效。以下是修正后的完整配置:
1. 修正Auth Handler配置
关键改动:
- 统一配置变量名大小写,避免读取不到正确的tenantId/密钥
- 移除手动定义的
authorization和tokenURL,让Provider自动生成单租户专属端点 - 明确指定
issuer字段,强制使用单租户颁发者地址
import { NuxtAuthHandler } from '#auth' import AzureADProvider from "next-auth/providers/azure-ad"; const runtimeConfig = useRuntimeConfig() export default NuxtAuthHandler({ pages: { signIn: '/login' }, secret: runtimeConfig.authSecret, providers: [ AzureADProvider.default({ clientId: runtimeConfig.public.azureAdClientId, clientSecret: runtimeConfig.azureAdClientSecret, // 统一变量名大小写 tenantId: runtimeConfig.public.azureAdTenantId, issuer: `https://login.microsoftonline.com/${runtimeConfig.public.azureAdTenantId}/v2.0`, // 强制单租户颁发者 authorization: { params: { scope: "openid profile email", // 保留权限配置 } }, }), ], })
2. 同步环境变量配置
确保.env文件变量名与代码中读取的完全一致:
# 前端可访问变量 NUXT_PUBLIC_AZURE_AD_CLIENT_ID=你的客户端ID NUXT_PUBLIC_AZURE_AD_TENANT_ID=你的租户ID # 后端专用变量(不可暴露给前端) AZURE_AD_CLIENT_SECRET=你的客户端密钥 NUXT_AUTH_SECRET=你的Auth密钥(可通过`openssl rand -hex 32`生成) NUXT_AUTH_ORIGIN=http://localhost:3000
3. 验证Entra ID应用注册
从截图确认单租户配置后,补充检查:
- 认证页面:添加重定向URI
http://localhost:3000/api/auth/callback/azure-ad - API权限页面:添加
openid、profile、email权限并完成管理员同意
4. nuxt.config.ts优化(可选)
简化配置并调整信任主机设置:
auth: { isEnabled: true, globalAppMiddleware: true, disableServerSideAuth: false, originEnvKey: 'NUXT_AUTH_ORIGIN', baseURL: '/api/auth', // 简化为相对路径 provider: { type: 'authjs', trustHost: true, // 本地开发建议设为true,生产环境按需调整 defaultProvider: 'azure-ad', addDefaultCallbackUrl: true, }, sessionRefresh: { enablePeriodically: true, enableOnWindowFocus: true, } },
核心原理
NextAuth.js的AzureADProvider未明确指定tenantId或issuer时,会默认使用/common多租户端点。单租户应用必须强制指定tenantId,让Provider生成https://login.microsoftonline.com/你的租户ID/...格式的专属端点,才能规避AADSTS50194错误。
内容的提问来源于stack exchange,提问作者Hyzac
相关产品推荐
相关产品推荐

