c# - 在 WCF 服务中使用 NetworkCredential

标签 c# asp.net .net wcf

我有一个 WCF 服务,它使用 Windows 身份验证来查看服务契约(Contract),并且服务中的特定方法被配置为只能由特定用户 UserX 访问。

[PrincipalPermission(SecurityAction.Demand,Name="xxx\\UserA")]

在客户端,我需要访问上面的服务方法。如果我使用网络引用 -> 我添加以下内容

client = new WebRefLocal.Service1();
client.Credentials = new System.Net.NetworkCredential("UserA", "xxxxxx", "test");

但上述内容在 WCF 服务引用中无法实现,因为客户端凭据是只读的。我实现上述目标的一种最佳方法是模拟 https://msdn.microsoft.com/en-us/library/ff649252.aspx

我的问题是

  1. 为什么 ClientCredentials 在 WCF 中设为只读?
  2. 网络凭证如何运作?他们会在客户端还是服务器端验证 Windows 登录?
  3. 有什么方法可以在 WCF 中实现上述目标而无需模拟吗?

最佳答案

我做过这样的事情 - 希望它有帮助:

 var credentials = new ClientCredentials();
credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
credentials.Windows.ClientCredential = new System.Net.NetworkCredential("UserA", "xxxxxx", "test");

client.Endpoint.Behaviors.Remove<ClientCredentials>();
client.Endpoint.Behaviors.Add(credentials);

与具有以下安全设置的 BasicHttpBinding 一起使用:

  <security mode="TransportCredentialOnly">
    <transport clientCredentialType="Windows" proxyCredentialType="Windows" />
  </security>

关于c# - 在 WCF 服务中使用 NetworkCredential,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32346560/

相关文章:

c# - 错误 "A template containing a class feature must end with a class feature"

c# - 在 LINQ 语句中执行多个连接

javascript - 如何在页面加载方法中调用 Javascript 函数?

c# - 我应该使用 Closing 事件还是重写 OnClosing?

c# - 我怎样才能只上传 jpeg 文件?

c# - 如何在 ListView 中拆分Container.DataItem字符串

.net - 将 ASP.NET Intranet 应用程序与 Outlook 日历集成的技术

c# - 作为外键的字符串 - 无法将 lambda 表达式转换为类型 'string',因为它不是委托(delegate)类型

c# - UWP 获取文本 block 中的隐藏文本

c# - 从对象数组中删除重复项