寻求指导:域外部署的.NET 6应用实现域内用户Azure AD免密登录
基于Azure AD实现域内用户免密访问域外.NET 6应用的方案指导
一、本地AD与Azure AD的轻量集成(最小改动)
无需大规模修改本地AD,通过以下两种模式即可实现本地域用户身份同步,对现有环境影响极小:
- 密码哈希同步(PHS):仅同步本地AD用户的密码哈希到Azure AD,无需部署额外代理,适合不确定客户本地AD维护方式的场景
- 传递身份验证(PTA):需在本地部署1-2台PTA代理服务器,用户登录时由本地AD验证凭据,Azure AD仅负责身份转发,同样无需改动本地AD核心配置
二、Azure AD代理(PTA代理)安装步骤
若选择传递身份验证模式,按以下流程安装代理:
- 在本地域内的Windows Server 2016+服务器上,登录Azure门户进入Azure AD Connect的传递身份验证配置页
- 下载Azure AD Connect Authentication Agent安装包
- 运行安装包,使用Azure AD全局管理员账号完成代理注册
- 安装完成后,代理会自动与Azure AD建立连接(默认使用443 outbound端口)
- 可部署多台代理实现高可用,避免单点故障
三、.NET 6应用的Azure AD认证配置
1. Azure AD应用注册配置
- 在Azure门户创建应用注册,设置重定向URI为你的应用地址(例如
https://your-app-domain/signin-oidc) - 启用ID令牌(用于OpenID Connect认证)
- 在「API权限」中添加
User.Read委派权限并授予管理员同意
2. 应用代码配置
在项目的Program.cs中添加认证逻辑:
var builder = WebApplication.CreateBuilder(args); // 添加Azure AD认证服务 builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")); // 配置授权策略 builder.Services.AddAuthorization(options => { options.FallbackPolicy = options.DefaultPolicy; }); builder.Services.AddRazorPages().AddMicrosoftIdentityUI(); var app = builder.Build(); // 启用认证与授权中间件 if (!app.Environment.IsDevelopment()) { app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.MapControllers(); app.Run();
3. 配置文件(appsettings.json)
添加Azure AD相关参数:
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "your-azure-ad-domain.onmicrosoft.com", "TenantId": "your-tenant-id", "ClientId": "your-app-client-id", "CallbackPath": "/signin-oidc" }
四、实现免密登录的关键设置
- 在Azure AD的企业应用中,将单点登录模式设为
OpenID Connect,并启用Seamless Single Sign-On(无缝SSO) - 确保域内用户的设备已加入本地AD域,且网络可访问Azure AD的443端口
- 无缝SSO会自动调用用户当前的域登录凭据完成认证,无需手动输入账号密码
五、注意事项
- 若客户本地AD无法直接访问互联网,需为PTA代理配置内网代理服务器以连接Azure AD
- 密码哈希同步模式下,本地AD密码变更后会自动同步到Azure AD,同步延迟通常在几分钟内
- 测试时可使用域内客户端设备,登录域账号后直接访问应用,验证自动认证效果
内容的提问来源于stack exchange,提问作者Prashant Zanjad
相关产品推荐
相关产品推荐

