【问题标题】:WCF, Clientcredentials, multiple hop, kerberos and windows authentication - how to get workingWCF、Clientcredentials、多跳、kerberos 和 windows 身份验证 - 如何开始工作
【发布时间】:2013-09-23 16:18:32
【问题描述】:

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

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

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

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. 确保允许应用程序池用户在 Active Directory 中委派
    3. 确保两台服务器都允许在 AD 中委托
    4. 在服务器 A 上的 web.config 中将身份验证设置为 windows 和 impersonate=true
    5. 确保 Thread.CurrentPrincipal.Identity.Name 有我的用户 ID
    6. 确保为 Windows 和模拟设置了 IIS
    7. 尝试将服务器 A 和 B 上的 IIS 配置限制为仅 Ntlm 和/或协商

非常感谢任何帮助或想法。

【问题讨论】:

  • 您似乎遇到了与此处所述类似的问题stackoverflow.com/questions/14928350/…
  • 是的,我读到了。添加 (8) 设置 useapppoolcreditials=true 和 (9) 我没有负载均衡器。
  • 不是说它有帮助,但我面临同样的问题,所以我正在监视这个问题,看看是否会弹出答案......
  • 好吧,如果你弄明白了,请告诉我!!!我会做同样的事情。
  • 我想没有人有其他想法吧?不要怪你:)

标签: wcf authentication kerberos credentials


【解决方案1】:

对于遇到同样问题的家伙 - 我想通了。我在目标服务上设置了 SPN,而不是它托管的服务。我还需要设置 sharepoint 以使用协商与 ntlm。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多