WCF,Clientcredentials,多跳,kerberos和Windows身份验证 - 如何开始工作

时间:2013-09-18 18:55:56

标签: wcf authentication kerberos credentials

我在服务器A上运行的Web应用程序调用服务器B上的WCF服务(K2工作流),该服务要求模拟/委派作为调用用户运行。如果我从服务器A运行Web应用程序,该应用程序运行良好。如果我在调试中从我的本地PC运行应用程序,它也很有效。如果我从我的PC上的浏览器点击应用程序到服务器A,我收到以下错误:

HTTP请求未经授权使用客户端身份验证方案'Ntlm'。从服务器收到的身份验证标头是'Ntlm,Negotiate'。 System.Net.WebException:远程服务器返回错误:(401)未经授权。 System.Service.Net.HttpWebRequest.GetResponse()at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)。

我使用以下代码运行服务:

SvcWorklist.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation;
SvcWorklist.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;

我觉得我已经完成了所有事情,这里列出了我尝试的内容:

  1. 将服务器A应用程序池域用户的SPN(包括端口)设置为服务器B. (NETBIOS和FQDN)
    1. 在服务器A和B上设置与应用程序池用户相同的域用户
    2. 确保允许app pool用户在Active Directory中委派
    3. 确保允许两台服务器在AD
    4. 中委派
    5. 在服务器A的web.config中将身份验证设置为windows,将impersonate = true设置为
    6. 确保Thread.CurrentPrincipal.Identity.Name具有我的用户ID
    7. 确保IIS设置为窗口和模拟
    8. 尝试将服务器A和B上的IIS配置限制为仅限Ntlm和/或协商
  2. 真正感谢任何帮助或想法。

1 个答案:

答案 0 :(得分:0)

对于有同样问题的家伙 - 我明白了。我在目标服务上设置了SPN,而不是它托管的服务。我还需要设置sharepoint以使用negotiate与ntlm。