我正在尝试编写一个执行Kerberos身份验证的简单应用程序(暂时不进行相互身份验证)。
操作系统是Windows Server 2003,标准版。 我已经设置了Active目录并使用setspn工具创建了一个SPN。
AcquireCredentialsHandle在客户端和服务器上返回SEC_E_OK。
客户端的InitializeSecurityContext返回SEC_E_OK。
服务器端的AcceptSecurityContext返回SEC_E_LOGON_DENIED。
我确信我的代码没有任何问题,因为我在使用以下MSDN文章中的示例应用程序时看到了相同的行为:http://msdn.microsoft.com/en-us/magazine/dvdarchive/bb985043.aspx
所以我猜我的设置有问题。但我找不到什么。也许我错过了SPN设置中的一些东西?任何帮助表示赞赏。
问候,大卫。
答案 0 :(得分:3)
是的,问题如下:
说,您的计算机名称为COMP,域名NetBios名称为DOMAIN,您要注册的SPN是MyService / COMP。
“setspn -A MyService / COMP COMP”命令为SYSTEM帐户注册SPN!当您的属于另一个帐户(例如管理员)的流程想要充当该SPN的服务器时,它理解为失败。
您可以使用以下命令将服务器作为SYSTEM(谷歌如何操作)或(更好)为管理员(或任何其他)帐户注册SPN:setspn -A MyService / COMP DOMAIN \ Administrator