本文提供有关修复导致 S4U Kerberos 身份验证在受信任林中用户失败的问题的帮助。
原始 KB 数: 2959395
现象
在林信任上启用选择性身份验证时,受信任的林中的用户无法通过 S4U Kerberos 身份验证。
具体而言,使用 Kerberos S4U 客户端请求对受信任林中的用户进行身份验证的应用程序调用 LsalogonUser API 的应用程序在满足以下条件时可能会失败:
- 提供给 LsalogonUser 的 ClientUPN 值表示启用了选择性身份验证的受信任林中的用户。
- 提供给 LsalogonUser 的 ClientRealm 值采用 NetBIOS 名称(平面名称),而不是完全限定的域名(FQDN)。
在这种情况下,网络跟踪显示 krbtgt 帐户的 TGS 请求失败并出现“STATUS_AUTHENTICATION_FIREWALL_FAILED(0xC0000413)”错误。
原因
在处理 LsalogonUser 请求过程中,Kerberos 客户端必须从用户受信任的林中的域控制器获取用户的身份验证票证时,会出现此问题。
如果 ClientRealm 值以平面名称格式传递,则 Kerberos 客户端不使用它作为引荐过程的一部分收到的引荐票证。 因此,客户端必须请求用户域中 Krbtgt 帐户的服务票证。
启用选择性身份验证后,用户域中的域控制器会检查 Krbtgt 帐户的“允许进行身份验证”权限,以查看发出票证请求的调用方的身份是否具有访问权限。
注意
发出服务票证请求的调用方具有调用 LsalogonUser 的线程当时正在模拟的标识。
如果不存在“允许进行身份验证”权限,则用户的域中的域控制器将生成KDC_ERR_POLICY错误和STATUS_AUTHENTICATION_FIREWALL_FAILED(0xC0000413)的扩展错误。
解决方法
若要解决此问题,请使用以下任一方法。
方法 1:从信任中删除选择性身份验证
目标资源域中的域控制器将忽略对帐户的“允许进行身份验证”权限。 在安全环境中,此行为可能不理想。
方法 2:将调用方的身份添加到目标用户域中 Krbtgt 帐户的“允许进行身份验证”权限
由于 Krbtgt 帐户是受保护的帐户,因此必须将调用方标识的“允许进行身份验证”权限添加到 AdminSdHolder 帐户对象。 为此,请按照下列步骤进行操作:
-
在目标用户的域中的域控制器上打开命令提示符。
-
运行以下命令,将“允许进行身份验证”权限添加到 AdminSdholder 对象:
dsacls "CN=AdminSDHolder,CN=System,DC=ForestB,DC=com" /G DomainA\callers-identity:CA;"Allowed to Authenticate"注意
- DC=ForestB,DC=com 是用户的目标林的可分辨名称。
- DomainA 是调用 LsaLogonUser 的帐户标识所在的域的名称。
- 调用方标识 是进行 LsaLogonUser 调用的标识的帐户名称。
-
运行以下命令,验证目标帐户的“允许进行身份验证”权限:
dsacls "CN=AdminSDHolder,CN=System,DC=ForestB,DC=com" -
在用户的目标域上运行 dsa.msc,然后找到 Krbtgt 帐户。
-
选择目标帐户的属性,然后单击“ 安全 ”选项卡。
-
向进行 LsaLogonUser 调用的帐户添加“允许进行身份验证”权限。