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

.NET Core 2 API配置Azure AD与Windows认证及SSO问题咨询

嘿,我刚好处理过类似的内网SSO场景,结合你已经在Azure那边完成AAD认证配置的情况,给你梳理下.NET Core 2 API里的关键配置步骤:

1. 先确保项目引入了正确的NuGet包

在你的.NET Core 2项目里,需要安装Microsoft.AspNetCore.Authentication.AzureAD.UI包(这是微软封装好的AAD认证工具,用起来更省心)。可以通过NuGet包管理器或者命令行安装:

Install-Package Microsoft.AspNetCore.Authentication.AzureAD.UI -Version 2.2.0
2. 配置appsettings.json的AAD参数

把Azure门户里获取到的AAD应用信息填到配置文件里,注意参数要和你在Azure应用注册里的配置完全匹配:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "你的公司域名.onmicrosoft.com",
  "TenantId": "你的AAD租户ID",
  "ClientId": "你的应用注册Client ID",
  "CallbackPath": "/signin-oidc"
}
3. 在Startup.cs里配置认证中间件

第一步:ConfigureServices方法中添加认证服务

using Microsoft.AspNetCore.Authentication.AzureAD.UI;

public void ConfigureServices(IServiceCollection services)
{
    // 先添加AAD认证服务
    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
        .AddAzureAD(options => Configuration.Bind("AzureAd", options));

    // 配置Cookie认证(AAD认证最终会用Cookie保存用户身份信息)
    services.Configure<CookieAuthenticationOptions>(AzureADDefaults.CookieScheme, options =>
    {
        options.Cookie.SameSite = SameSiteMode.None; // 根据内网环境调整,可选None/Lax/Strict
        options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // 如果用HTTPS访问就设置这个
        options.ExpireTimeSpan = TimeSpan.FromHours(8); // 凭据有效期,按需调整
    });

    // 如果你的API需要接受前端的Bearer令牌调用,补充JWT认证配置
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = $"{Configuration["AzureAd:Instance"]}{Configuration["AzureAd:TenantId"]}";
            options.Audience = Configuration["AzureAd:ClientId"];
        });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

第二步:Configure方法中启用认证中间件

一定要把app.UseAuthentication()放在app.UseMvc()之前,这样请求进来时会先执行身份验证逻辑:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // 先处理异常、静态文件等基础中间件...

    // 配置反向代理请求头(如果Azure App Service用了VNet集成/Private Endpoint,必须加这个)
    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });

    app.UseAuthentication();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}
4. 实现自动SSO(无需手动登录)

因为内网员工已经通过AD凭据登录域,只要在需要保护的Controller或Action上添加[Authorize]属性,用户访问时浏览器会自动用当前域用户的凭据完成AAD认证,完全不需要手动输入账号密码:

[Authorize]
[ApiController]
[Route("api/[controller]")]
public class InternalApiController : ControllerBase
{
    // 你的内网API接口逻辑...
}
5. 内网访问的额外检查点
  • 确认AD Connect已经把内网AD用户完整同步到AAD,并且这些用户在Azure应用注册里被授予了访问权限(可以在门户里配置用户/组权限);
  • 如果你的Azure App Service仅允许内网访问,要确保VNet集成或Private Endpoint配置正常,避免认证请求被拦截。

这样配置后,内网用户访问你的API时就会自动完成SSO流程啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:44:29