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

咨询:是否有.Net Core集成Azure AD B2C的配置教程或指南

绝对有!我之前也踩过官方旧文档的坑,整理了一套更贴合当前.NET Core 6+版本的Azure AD B2C配置指南,一步步来,每个环节都给你讲清楚:

一、Azure AD B2C 后台基础配置

先把B2C租户这边的准备工作做扎实:

  • 创建/选择B2C租户:如果还没有,先在Azure门户创建专门的B2C租户(注意和普通Azure AD租户区分开)
  • 注册应用程序:在B2C租户的“应用注册”里新建一个Web应用,记得勾选“允许隐式流”(用于获取ID令牌),然后设置回复URL(比如https://localhost:5001/signin-oidc,本地调试用)
  • 创建用户流/自定义策略:新手建议先从用户流入手,创建一个“注册和登录”的用户流,记住它的名称(比如B2C_1_signupsignin1),后续配置要用到
  • 生成客户端密钥:在应用注册的“证书和密码”里创建一个客户端密码,保存好这个值,后面配置会用到
二、.NET Core 项目集成步骤

以.NET 6+的Web项目为例,步骤如下:

  1. 安装必要的NuGet包:
    在包管理器控制台或者终端运行:

    Install-Package Microsoft.AspNetCore.Authentication.OpenIdConnect
    Install-Package Microsoft.Identity.Web
    

    用Microsoft.Identity.Web是因为它是微软官方维护的、适配最新.NET版本的身份验证库,比旧的Microsoft.AspNetCore.Authentication.AzureADB2C更靠谱

  2. 配置appsettings.json:
    添加以下配置节点,把占位符替换成你自己的B2C信息:

    "AzureAdB2C": {
      "Instance": "https://your-tenant-name.b2clogin.com/",
      "Domain": "your-tenant-name.onmicrosoft.com",
      "ClientId": "你的应用注册ID",
      "ClientSecret": "你的客户端密钥",
      "SignUpSignInPolicyId": "你的注册登录用户流ID(比如B2C_1_signupsignin1)",
      "CallbackPath": "/signin-oidc"
    }
    

    解释下关键参数:

    • Instance:B2C的认证端点前缀,固定格式,替换租户名即可
    • Domain:你的B2C租户完整域名
    • CallbackPath:要和你在应用注册里设置的回复URL路径一致
  3. 在Program.cs中配置认证中间件:
    替换默认的认证配置,加入B2C的OpenID Connect认证:

    var builder = WebApplication.CreateBuilder(args);
    
    // 添加Microsoft.Identity.Web服务
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAdB2C"));
    
    // 添加授权服务
    builder.Services.AddAuthorization(options =>
    {
        options.FallbackPolicy = options.DefaultPolicy;
    });
    
    builder.Services.AddRazorPages();
    
    var app = builder.Build();
    
    // 中间件顺序很重要,先加认证再加授权
    app.UseAuthentication();
    app.UseAuthorization();
    
    app.MapRazorPages();
    
    app.Run();
    
  4. 在页面/控制器中添加认证逻辑:
    比如在Razor页面里,用[Authorize]特性保护页面,然后可以通过User对象获取用户信息:

    [Authorize]
    public class ProfileModel : PageModel
    {
        public void OnGet()
        {
            // 获取用户的显示名称
            var userName = User.Identity.Name;
            // 获取用户的B2C用户ID
            var userId = User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;
        }
    }
    
三、常见问题与调试技巧
  • 回调地址不匹配:如果出现“回复URL不匹配”的错误,检查appsettings里的CallbackPath和应用注册里的回复URL是否完全一致(包括HTTP/HTTPS、端口号)
  • 令牌验证失败:确保Instance、Domain、SignUpSignInPolicyId没有拼写错误,尤其是用户流ID的前缀B2C_1_不能丢
  • 用户信息获取不全:如果需要获取更多用户属性(比如邮箱、手机号),要在用户流的“应用程序声明”里勾选对应的声明,然后在代码里通过User.FindFirst("声明名称")获取
  • 本地调试HTTPS问题:.NET Core默认启用HTTPS,调试时要确保回复URL用的是https://localhost:xxxx,如果遇到证书问题,可以运行dotnet dev-certs https --trust信任开发证书

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:26:09