首先我要说的是,我已经研究这个问题大约一个半星期了,但我还是搞不清楚。我想我已经接近答案了,但到目前为止,每次我这么想,我都错了。我查看了所有我能想到的论坛帖子,但都无济于事。
我只是想让我的 Web 应用程序及其相应的服务使用 Windows 身份验证,以便在代码中,我可以在不提示他们的情况下提取当前登录用户的凭据,并通过我的服务将它们传递给我的数据库存储过程。
听起来很简单,对吧?
错误的!
和WireShark运行,我不断收到回复KRB_ERROR (30)进一步详细信息如下:
错误代码:KRB5KRB_AP_ERR_MODIFIED (41)
我明天会试试,但我想我现在就发布,以防有人知道为什么我一直得到KRB5KRB_AP_ERR_MODIFIED根据我当前的设置出现的错误,我将在下面列出。
这是我当前的设置:
Windows Server 2008 R2 标准 SP1 64 位 4.00 GB RAM。
为了方便阅读,我们将此服务器称为DALDEP01.测试.本地,其中有以下内容:
MS SQL 服务器 2008 R2它有一个数据库,我们称之为部署。
只有一个用户帐户可以访问部署db 是TEST\部署服务。
此用户帐户是数据读取器/数据写入器并已获得执行。
IIS 7.5拥有 2 个网站:
部署.服务针对部署D b。
部署.Web举办Silverlight 4应用程序调用部署.服务。
两个站点的配置相同(因为我不确定还有什么其他方法可以做到这一点):
他们使用部署应用程序池在自定义用户帐户下运行TEST\部署服务。
匿名身份验证是已禁用。
Windows 身份验证是已启用
扩展保护接受。
启用内核模式身份验证已检查。
提供者只是谈判,因为我只想要 Kerberos,所以我删除了 NTLM。
服务提供者名称配置如下:
目录:\>setspn -l 部署vc
为 CN=DeploySvc、OU=Services Accounts、DC=test、DC=local 注册的 ServicePrincipalNames:
HTTP/deploy.test.local
HTTP/deploy
答案1
重复的 SPN 可能会导致此问题...
setspn -X
...将显示您的域中是否存在任何重复项,您需要删除有问题的域。或者您可以使用SPN 查询实用程序。我还假设您已经修改了 AD 中服务帐户的委派选项卡,以便它可以被信任进行委派?
答案2
我最近遇到了同样的问题。
原来是与 SPN 有关。SPN 已映射到 SQL Server 的计算机帐户,而不是映射到运行 SQL Server 的服务帐户。
我们删除并重新创建了 SPN - 映射到主机上运行 SQL Server 2012R2 的服务帐户,一切顺利。