情况:
我的Web服务器上部署了一个.NET asmx Web服务。此服务在另一台服务器(我们的SharePoint服务器,如果相关)上调用服务。我想使用客户端的凭据模拟/委托从我的Web服务调用SharePoint服务。
问题:
当我调用MY Web Service并调用SharePoint时,我从SharePoint服务获得401响应。
设定:
我可以在SharePoint日志上看到,当我在Visual Studio中本地运行时,用户名正在通过(并且服务正常工作)但是当我在Web服务器上运行时,没有用户名在日志文件上,我得到401错误
我设置错误以使Kerberos委派工作?
想法?谢谢!
答案 0 :(得分:5)
<强>平台:强>
使用IIS7这是我在BOTH服务器上所做的。第一个服务器和第二个我们希望Kerberos身份验证“跳转”到的服务器。
第1步:
对于您正在调用其中的服务的IIS站点(在每台服务器上)进入IIS管理器,单击“连接”下左侧的站点,然后打开IIS下的“身份验证”部分。将“ASP.NET模拟”设置为“已启用”,将“Windows身份验证”设置为“已启用”。“身份验证”(Ananymous,Forms等)下的所有其他选项应设置为“已禁用”。
在“Windows身份验证”下,右键单击并选择“提供商”。将唯一的提供者设置为“Negotiate:Kerberos”(这会强制Kerberos。如果您愿意,在您获得Kerberos工作后,您可以同时使用“Negotiate”和“NTLM”提供程序并删除“Negotiate:Kerberos”,以便客户端无法Kerberos可以连接。注意:我目前已将我的设置为“Negotiate”和“NTLM”,它似乎有效)
在“Windows身份验证”下,右键单击并选择“高级设置”。取消选中“启用内核模式”框。 (我的扩展保护选项已设置为关闭,未尝试其他任何操作)
第2步:
对于每台服务器,您必须设置SPN。 SPN将是以下(A或B):
答强>
如果您的应用程序池在DOMAIN ACCOUNT的IDENTITIY下运行,请将以下SPN添加到域控制器上的域帐户
http/COMPUTER_NETBIOS_NAME
http/COMPUTER_NETBIOS_NAME.FULLY_QUALIFIED_DOMAIN_NAME
http://COMPUTER_NETBIOS_NAME.FULLY_QUALIFIED_DOMAIN_NAME
(如果您没有在默认端口上运行,还添加了附加端口名称的附加3个条目:http / COMPUTER_NETBIOS_NAME:PORT等。)
<强> B:强>
如果您的应用程序池在IDENTITY“NetworkService”下运行,则添加与上面相同的SPN,除了将“http”替换为“HOST”,然后将其添加到域控制器上的COMPUTER_NETBIOS_NAME。
我仍在努力在生产中实现这一点,但这在我的测试环境中对我有用。随着我发现更多内容,我会随时更新。
注意:强>
如果您在连接时直接在网址中使用COMPUTER_NETBIOS_NAME,则此方法有效。如果您直接使用别名(www.mysite.mydomain.com)或IP地址,则无效。我相信,虽然我还没有对其进行全面测试,但您必须完成上述步骤,但在添加SPN时,请使用别名或IP地址替换COMPUTER_NETBIOS_NAME。 (或者用netbios和别名/ ip添加它,不太确定)
此外,如果您在打开“ASP.NET模拟”后收到有关集成无效的设置的错误,则可能需要添加
<validation validateIntegratedModeConfiguration="false" />
到system.webServer部分的web.config
答案 1 :(得分:1)
试试这个:
将Negotiate
移至“提供者”列表的顶部。并且,通常在applicationHost.config
下的C:\Windows\System32\inetsrv\config
文件中,将useKernelMode="true" useAppPoolCredentials="true"
添加到应用的<windowsAuthentication>
标记下的<location>
标记中,如下所示:
<location path="YOUR_APPLICATION_PATH">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" useKernelMode="true" useAppPoolCredentials="true">
<providers>
<clear />
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</location>
答案 2 :(得分:1)
委托需要Kerberos。您必须使用Kerberos进行SharePoint服务器支持身份验证。