WCF、Clientcredentials、多跃点、kerberos 和 Windows 身份验证 - 如何开始工作

标签 wcf authentication kerberos credentials

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

HTTP 请求未经客户端身份验证方案“Ntlm”授权。从服务器收到的身份验证 header 是“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 应用程序池域用户到服务器 B 设置 SPN(包括端口) (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 和/或协商

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

最佳答案

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

关于WCF、Clientcredentials、多跃点、kerberos 和 Windows 身份验证 - 如何开始工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18880138/

相关文章:

c# - 参数序列化——指定命名空间

ios - tvOS 模拟器是否支持 Sign in with Apple (SIWA)?

php - 从我的站点登录到 wordpress 站点

hadoop - QlikView 和 Hadoop 与 Kerberos 在同一台服务器上

hadoop - 初始化kadmin界面时找不到领域的KDC

asp.net - WCF 服务每 23 小时失败一次,错误代码为 "The request channel timed out while waiting for a reply after 00:01:00"

jquery - WCF + JSONP : always get a "method not allowed" error message

c# - 连接到网络服务的 Android 应用程序 - 无法正常工作

asp.net-mvc - 如何在.NET Web应用程序中创建用户身份验证?

windows - Windows 浏览器中的 Kerberos SSO 身份验证