.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
相关产品推荐
相关产品推荐

