如何在Azure AD中为Web应用配置Kerberos身份验证的单点登录?
配置Azure AD Web应用的Kerberos身份验证指南
我明白你在配置Kerberos集成Windows身份验证时遇到了困惑,毕竟这比基于密码的SSO要涉及更多环境配置细节。下面我会一步步带你梳理关键配置步骤,帮你搞定这个问题:
前提条件
- 你的Web应用必须部署在加入域的服务器上(本地AD或Azure AD DS均可),Kerberos依赖域环境的KDC(密钥分发中心)才能正常工作。
- 服务器已安装Web服务器角色(IIS),并启用了Windows身份验证功能。
- 你拥有Azure AD的全局管理员或应用管理员权限,且已在Azure AD中完成Web应用的基础注册。
核心配置步骤
1. 为Web服务注册服务主体名称(SPN)
Kerberos需要SPN来关联服务账户与应用服务。以域管理员身份打开命令提示符,执行以下命令:
setspn -S HTTP/your-app-domain.com DOMAIN\your-service-account
注意:
your-app-domain.com是Web应用的公网/内网域名;如果IIS使用默认的ApplicationPoolIdentity运行,服务账户需替换为DOMAIN\computer-name$(计算机账户)。
2. 配置IIS的Windows身份验证
- 打开IIS管理器,定位到你的Web应用站点。
- 进入身份验证功能,禁用匿名身份验证,启用Windows身份验证。
- 双击Windows身份验证,点击提供程序,确保
Negotiate排在NTLM之前(让系统优先使用Kerberos)。
3. 配置Azure AD应用注册
- 登录Azure门户,找到你的应用注册,进入对应的企业应用程序条目。
- 转到单点登录,选择**集成Windows身份验证(IWA)**选项。
- 在「内部应用程序SAML URL」中填写Web应用的内部访问URL(例如
https://internal-app-domain.com/)。 - 配置Kerberos约束委派:在应用注册的「服务主体名称」中添加之前创建的SPN;或者在AD中为服务账户配置约束委派,允许其委派给该SPN。
4. 配置Web应用代码(以.NET为例)
如果是ASP.NET应用,确保web.config中启用Windows身份验证:
<system.web> <authentication mode="Windows" /> <authorization> <deny users="?" /> <!-- 拒绝匿名访问 --> </authorization> </system.web>
同时,使用Microsoft.Identity.Web库处理Azure AD身份验证:
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme) .AddNegotiate() .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));
常见问题排查
- Kerberos回退到NTLM:检查SPN是否正确注册、服务账户是否有读取SPN的权限,以及客户端与服务器是否在同一域或信任域内。
- Azure AD身份验证失败:确认应用注册的回复URL与Web应用实际URL匹配,Kerberos约束委派配置无误。
- 浏览器兼容性问题:IE/Edge默认支持Kerberos;Chrome需在
chrome://settings/privacy中添加应用域名到「允许使用集成身份验证的站点」列表。
内容的提问来源于stack exchange,提问作者Sunil Sunny
相关产品推荐
相关产品推荐

