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

现有ASP.NET MVC与API项目集成Azure AD认证的方案咨询

整体技术选型

直接用微软官方提供的Microsoft.Identity.Web类库实现即可,这套库封装了Azure AD OAuth2.0/OpenID Connect的全流程逻辑,不需要手写token签发、校验、跳转的底层代码,完全兼容现有带Startup类的ASP.NET项目,可以和你原有的用户名密码登录逻辑并存,不需要重构现有认证体系。

端到端登录流程

整体链路不需要改动原有账号密码的处理逻辑,新增的Azure登录流程走如下链路:

  • 前端MVC登录页新增「通过Azure登录」按钮,用户点击后跳转到Azure AD授权页面
  • 用户在Azure AD页面完成账号校验、授权后,Azure AD将授权码回传到MVC站点提前配置的回调地址
  • MVC站点用授权码换取id token和访问API用的access token,后续调用API时将access token放在请求的Authorization头中
  • API侧校验access token合法性,提取token中携带的用户属性(邮箱、姓名、租户ID等),和本地用户库完成匹配后,走和原有账号密码登录完全一致的会话创建逻辑即可
现有API项目(含Startup类)配置步骤

重点注意不要删除原有账号密码对应的认证配置,只需要增量添加Azure AD认证能力即可:

  1. 先给API项目安装Nuget包,在包管理控制台执行:Install-Package Microsoft.Identity.Web
  2. 修改Startup类的ConfigureServices方法,在原有AddAuthentication的逻辑上增量添加Azure AD的token校验配置,示例代码如下:
    public void ConfigureServices(IServiceCollection services)
    {
        // 原有服务注册(比如AddControllers、DbContext、业务依赖注入等)全部保留不动
    
        services.AddAuthentication()
            // 原有自定义JWT认证(账号密码登录用),你之前写的校验配置全部保留不动
            .AddJwtBearer("LocalJwt", options => 
            {
                // 原有JWT校验参数,比如IssuerSigningKey、ValidIssuer、ValidAudience等不需要修改
            })
            // 新增Azure AD颁发的JWT token校验逻辑
            .AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"), "AzureAdJwt");
    
        // 配置授权策略,同时支持本地账号密码的JWT凭证、Azure AD颁发的token访问接口
        services.AddAuthorization(options =>
        {
            options.DefaultPolicy = new AuthorizationPolicyBuilder(
                "LocalJwt",
                "AzureAdJwt")
                .RequireAuthenticatedUser()
                .Build();
        });
    }
    
  3. 检查Startup类Configure方法中的中间件顺序,确保app.UseAuthentication()在app.UseAuthorization()之前即可,如果你原来已经配置了这两个中间件,不需要重复添加,保持原有顺序就行:
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 原有异常处理、静态文件、路由等中间件保持不变
        app.UseRouting();
    
        // 确认两个认证授权中间件的顺序,认证在前、授权在后
        app.UseAuthentication();
        app.UseAuthorization();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
    
  4. 在appsettings.json配置文件中添加AzureAD节点,填入你在Azure AD中注册API应用拿到的对应参数:
    "AzureAd": {
      "Instance": "https://login.microsoftonline.com/",
      "Domain": "你的Azure AD租户默认域名",
      "TenantId": "你的Azure AD租户ID",
      "ClientId": "API应用对应的Azure AD应用注册ID",
      "Scopes": "你为API暴露的访问权限范围"
    }
    
前端MVC侧配套注意点
  • 单独为MVC前端在Azure AD中注册一个应用,配置登录回调地址为MVC站点的/signin-oidc路径,同时给这个应用授予访问API的权限
  • MVC侧同样安装Microsoft.Identity.Web包,配置OpenID Connect认证逻辑,点击Azure登录按钮时触发认证挑战跳转到Azure AD授权页
  • MVC拿到Azure AD返回的access token后,后续调用API时按照Bearer <token内容>的格式放到请求头里即可
  • 如果需要支持首次用Azure登录的用户自动注册,只需要在API校验token通过后,查询本地用户库如果不存在对应用户,就根据token携带的用户属性自动创建本地账号即可,后续业务逻辑不需要改动

注意:原有用户名密码登录的逻辑完全不需要改动,两种登录方式可以并行提供给用户选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:33:40