src/lib/plugins/auth/azure.ts
Azure AD(Microsoft Entra ID)认证插件,支持通过 Microsoft 企业账号登录。
概述
该插件基于 NextAuth.js 的 MicrosoftEntraID Provider,集成 Azure Active Directory(现 Microsoft Entra ID)认证流程。
主要导出
azurePlugin
认证插件实例,实现了 AuthPlugin 接口。
import { azurePlugin } from "@/lib/plugins/auth/azure";
功能特性
企业级认证
- 支持 Azure AD 多租户或单租户配置
- 基于 OpenID Connect 的认证流程
- 适合企业环境部署
Issuer 配置
支持两种配置方式:
- 多租户(common):任何 Azure AD 用户都可以登录
- 单租户:仅特定租户的用户可以登录
环境变量
需要配置以下环境变量:
# Azure AD 应用注册配置
AZURE_AD_CLIENT_ID=your_client_id
AZURE_AD_CLIENT_SECRET=your_client_secret
AZURE_AD_TENANT_ID=your_tenant_id # 可选,不设置则使用多租户
获取方式
- 进入 Azure Portal
- 进入 Microsoft Entra ID(或 Azure Active Directory)
- 选择 App registrations → New registration
- 填写应用名称
- 选择支持的账户类型:
- 单租户:仅此组织目录中的账户 - 多租户:任何组织目录中的账户
- 添加平台 → Web
- 配置重定向 URI:
http://localhost:3000/api/auth/callback/azure-ad - 创建后获取 Client ID
- 在 Certificates & secrets 中创建 Client Secret
使用方式
前端登录调用
import { signIn } from "next-auth/react";
await signIn("azure-ad");
配置启用
在 prompts.config.ts 中启用:
export default defineConfig({
auth: {
providers: ["azure", "credentials"],
allowRegistration: true,
},
// ...
});
Issuer URL 构造
插件会根据 AZUREADTENANT_ID 自动构造 Issuer URL:
// 配置了 TENANT_ID
https://login.microsoftonline.com/{tenant_id}/v2.0
// 未配置 TENANT_ID(多租户)
undefined(使用 MicrosoftEntraID 默认值)
用户创建流程
- 用户点击 Microsoft 登录按钮
- 重定向到 Microsoft 授权页面
- 用户授权后,Microsoft 回调到应用
- NextAuth 处理 OAuth 回调
- 调用自定义 Prisma Adapter 创建用户
- 自动生成用户名
注意事项
- 适合企业环境,与个人账号(Microsoft Account)有所区别
- 需要管理员同意某些权限(视租户配置而定)
- 确保 Azure AD 应用中配置了正确的回调 URL
- Client Secret 有过期时间,需要定期更新
- 单租户模式下,只有同一组织的用户可以登录