![IIS 如何知道要使用哪个 AD 服务器/域来使用 Kerberos?](https://linux22.com/image/758712/IIS%20%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E8%A6%81%E4%BD%BF%E7%94%A8%E5%93%AA%E4%B8%AA%20AD%20%E6%9C%8D%E5%8A%A1%E5%99%A8%2F%E5%9F%9F%E6%9D%A5%E4%BD%BF%E7%94%A8%20Kerberos%EF%BC%9F.png)
我目前正在设置 IIS Web 应用程序。对于身份验证,我使用集成 Windows 身份验证和 Kerberos。但我对所有 AD、Windows 身份验证和 Kerberos 内容都不太熟悉。我的应用程序按我想要的方式运行,但有一件事我不明白。
IIS 如何知道在验证 Kerberos 票证时应使用哪个 Active Directory 服务器?在我的开发环境中,这一点很清楚:它可能使用我登录的域的 AD。但是当我将软件部署给客户时,没有人会登录,计算机只会启动,IIS 会启动 Web 应用程序。它如何知道在哪里验证 Kerberos 票证?没有人登录服务器计算机,因此没有帐户域。
客户端是否传输其域信息? IIS 是否有自己的域帐户? 服务器计算机是否也知道其域,而无需用户登录?
答案1
somehow the server has to know whether the presented ticket from the client is valid
。
不必要。
在 Microsoft Active Directory 的 Kerberos 实现中,权限和角色(组成员身份)存储在 Kerberos 令牌的一部分中,称为特权属性证书 (PAC)。当将令牌提供给另一个系统或进程时,将评估 PAC 以确定它们是否具有访问权限,通常是通过组成员身份。
Windows 可以验证 PAC。这通常作为完整性检查执行,以确保它不是伪造的。但是,PAC 验证旨在在特定情况下发生,例如当受信任的委派应用程序尝试重用已在本地缓存的模拟或委派用户的 Kerberos 票证时。
如果执行了 PAC 验证,Windows Netlogon 服务只需向本地域控制器发送 PAC 验证请求,如下所述:
4.2 Kerberos PAC 验证
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-apds/1d1f2b0c-8e8a-4d2a-8665-508d04976f84
但是,如果进程具有“作为操作系统的一部分”权限,则可能不会发生 PAC 验证。请注意,如果 IIS 使用集成身份验证并对经过身份验证的用户执行委托级别模拟,则可能需要具有“作为操作系统的一部分”权限。
此外,如果您仅对用户进行身份验证并使用他们的令牌组授予访问权限而不是模拟他们的令牌,则可能不会发生 PAC 验证。
更多信息: