src/lib/plugins/auth/azure.ts

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 配置

支持两种配置方式:

  1. 多租户(common):任何 Azure AD 用户都可以登录
  2. 单租户:仅特定租户的用户可以登录

环境变量

需要配置以下环境变量:

# Azure AD 应用注册配置
AZURE_AD_CLIENT_ID=your_client_id
AZURE_AD_CLIENT_SECRET=your_client_secret
AZURE_AD_TENANT_ID=your_tenant_id  # 可选,不设置则使用多租户

获取方式

  1. 进入 Azure Portal
  2. 进入 Microsoft Entra ID(或 Azure Active Directory)
  3. 选择 App registrations → New registration
  4. 填写应用名称
  5. 选择支持的账户类型:

- 单租户:仅此组织目录中的账户 - 多租户:任何组织目录中的账户

  1. 添加平台 → Web
  2. 配置重定向 URI:http://localhost:3000/api/auth/callback/azure-ad
  3. 创建后获取 Client ID
  4. 在 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 默认值)

用户创建流程

  1. 用户点击 Microsoft 登录按钮
  2. 重定向到 Microsoft 授权页面
  3. 用户授权后,Microsoft 回调到应用
  4. NextAuth 处理 OAuth 回调
  5. 调用自定义 Prisma Adapter 创建用户
  6. 自动生成用户名

注意事项

  1. 适合企业环境,与个人账号(Microsoft Account)有所区别
  2. 需要管理员同意某些权限(视租户配置而定)
  3. 确保 Azure AD 应用中配置了正确的回调 URL
  4. Client Secret 有过期时间,需要定期更新
  5. 单租户模式下,只有同一组织的用户可以登录
← 返回目录