2

我正在尝试编写一个执行 Kerberos 身份验证的简单应用程序(目前没有相互身份验证)。

操作系统为Windows server 2003,标准版。我已经设置了活动目录并使用 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 设置中的某些内容?任何帮助表示赞赏。

问候,大卫。

4

1 回答 1

4

是的,问题如下:

比如说,您的计算机名称是 COMP,域 NetBios 名称是 DOMAIN,您要注册的 SPN 是 MyService/COMP。

“setspn -A MyService/COMP COMP”命令为SYSTEM帐户注册SPN!而且,当您属于另一个帐户的进程(例如管理员)想要充当该 SPN 的服务器时,它可以理解地失败了。

您可以将您的服务器作为 SYSTEM 运行(谷歌了解如何操作)或(更好)使用以下命令为管理员(或任何其他)帐户注册 SPN:setspn -A MyService/COMP DOMAIN\Administrator

于 2010-06-20T13:40:40.147 回答