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

如何将Azure Active Directory用户导入Azure Active Directory B2C并实现.NET 6 MVC应用多源身份认证

解答你的AAD与AAD B2C多认证及用户导入问题

一、AAD B2C能否继承AAD用户?

首先明确:Azure AD(AAD)和Azure AD B2C是完全独立的租户,不存在直接“继承”用户的机制。不过你可以通过联合身份验证(Federation),让公司AAD的用户直接用自己的AAD账户登录你的B2C应用,无需在B2C中重复创建用户。这种方式下,B2C会将认证请求转发到你的公司AAD,验证通过后为用户颁发B2C的令牌,实现统一登录体验。

二、.NET 6 MVC同时配置AAD与AAD B2C认证

我之前在项目中实现过类似需求,核心是在应用中注册两个独立的认证方案,分别对应AAD和AAD B2C,然后提供不同的登录入口触发对应的认证流程。以下是具体实现步骤:

1. 配置appsettings.json

添加AAD和B2C的配置项:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "your-company-domain.onmicrosoft.com",
  "TenantId": "your-aad-tenant-id",
  "ClientId": "your-aad-app-client-id",
  "CallbackPath": "/signin-aad"
},
"AzureAdB2C": {
  "Instance": "https://your-b2c-tenant.b2clogin.com/",
  "ClientId": "your-b2c-app-client-id",
  "Domain": "your-b2c-tenant.onmicrosoft.com",
  "SignUpSignInPolicyId": "B2C_1_SignUpSignIn",
  "CallbackPath": "/signin-b2c"
}

2. 在Program.cs中注册两个认证方案

var builder = WebApplication.CreateBuilder(args);

// 添加AAD认证
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie()
.AddAzureAD(options => builder.Configuration.Bind("AzureAd", options))
.AddAzureADB2C(options => builder.Configuration.Bind("AzureAdB2C", options));

// 添加MVC服务
builder.Services.AddControllersWithViews();

var app = builder.Build();

// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

3. 在视图中添加两个登录按钮

在登录页面(比如Login.cshtml)添加两个按钮,分别触发不同的认证方案:

<form asp-action="Login" method="post">
    <button type="submit" name="provider" value="AzureAD">使用公司AAD账户登录</button>
    <button type="submit" name="provider" value="AzureADB2C">使用自定义账户登录</button>
</form>

4. 在Account控制器中处理登录请求

public class AccountController : Controller
{
    public IActionResult Login()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Login(string provider)
    {
        // 生成回调URL
        var redirectUrl = Url.Action("Index", "Home");
        // 根据选择的提供商发起认证挑战
        return Challenge(new AuthenticationProperties { RedirectUri = redirectUrl }, provider);
    }
}

这样用户就能自主选择用公司AAD账户或B2C自定义账户登录你的应用了。

三、将AAD用户导入到AAD B2C

如果需要将AAD中的用户复制到B2C租户中(而非联合登录),可以通过以下几种方式:

1. 手动导入(适合少量用户)

  • 登录Azure Portal,进入你的B2C租户
  • 导航到用户 > 新建用户,手动输入AAD用户的基础信息(邮箱、显示名等)
  • 注意:B2C创建的是本地账户,和原AAD用户完全独立,需要设置初始密码并提示用户首次登录时修改

2. 使用Microsoft Graph API批量导入

对于大量用户,推荐编写脚本调用Graph API批量创建B2C用户:

  1. 先从AAD导出用户列表(通过Azure Portal导出或调用AAD的Graph API获取)
  2. 转换用户格式为B2C要求的结构,调用B2C租户的Graph API CreateUser接口:
POST https://graph.microsoft.com/v1.0/users
Content-Type: application/json

{
    "accountEnabled": true,
    "displayName": "John Doe",
    "mailNickname": "johndoe",
    "userPrincipalName": "john.doe@your-b2c-tenant.onmicrosoft.com",
    "passwordProfile": {
        "forceChangePasswordNextSignIn": true,
        "password": "TempPass123!"
    }
}

3. 不推荐:Azure AD Connect同步

官方不建议用Azure AD Connect同步AAD用户到B2C,因为两者的用户模型、属性规则差异较大,容易出现同步错误或兼容性问题,仅在特殊场景下可尝试配置自定义同步规则,优先级远低于Graph API方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:09:04