我们有一个.Net Windows服务,使用Httplistener并使用Kerberos来validation请求。 当用户通过浏览器连接时,用户事件日志中的错误显示Kerberos事件ID 4:
Kerberos客户端从服务器$ username $收到一个KRB_AP_ERR_MODIFIED错误。 目标名称是HTTP / $ servername $。$ domain $ .com.au。 这表明目标服务器无法解密客户端提供的票证。 当目标服务器主体名称(SPN)在目标服务正在使用的帐户以外的帐户上注册时,可能会发生这种情况。 确保目标SPN只在服务器使用的帐户上注册。 如果目标服务帐户密码与Kerberos密钥分发中心为该目标服务configuration的密码不同,也会发生此错误。 确保服务器和KDC上的服务都configuration为使用相同的密码。 如果服务器名称不完全合格,并且目标域($ domain $ .COM.AU)与客户端域($ domain $ .COM.AU)不同,请检查这两个域中是否有相同名称的服务器帐户,或者使用完全限定的名称来标识服务器。
由于某种原因,它所报告的服务器是运行该服务的用户。 第一行:
Kerberos客户端从服务器$ username $收到一个KRB_AP_ERR_MODIFIED错误。
每一个网站(包括服务器故障)都修复了这个错误与SPN问题,但它始终有一个服务器名称的错误。 用用户名无法find上述信息。
我们已经尝试了不同的用户,并且更改了错误消息的上述部分。 所有的域帐户都有同样的问题。 如果我们将服务作为本地系统帐户运行,则不存在此问题,但这会导致我们在服务中出现其他问题(它需要其他权限的域帐户)。 我们没有,从来没有与我们尝试过的用户名同名的任何服务器。
有没有人看到这个问题,用户名出现在这里? 什么是修复?
所有的服务器都是Windows 2012(不是R2)。
很高兴你解决了你自己的问题,但这听起来不像你明白你为什么解决了这个问题。
底线,SPN需要设置在适当的对象上。 这听起来像是你在运行服务的AD中的计算机对象上设置了SPN。 这就是为什么事情开始工作,如果你改变服务作为系统运行。 但是,如果将其更改为以域用户身份运行,则需要将SPN移动到该用户。 移动它是很重要的(阅读:从计算机帐户中删除它),而不是复制它。 重复的SPN会破坏事物。
在这里find解决scheme: http : //blogs.technet.com/b/dcaro/archive/2013/07/04/fixing-the-security-kerberos-4-error.aspx
我跑了:
setspn -A HTTP/$servername$.$domain$.com.au $username$
并解决了这个问题