c# - WCF 的凭证委托(delegate)问题

标签 c# .net wcf credentials networkcredentials

Usage Scenario 三台机器都在同一个域

  • 机器 1 - 具有在 user1 下运行的应用程序,从那里生成请求
  • 机器 2 - 是在托管 WCF 服务的网络服务下运行的 Windows 服务,使用 WSHttpBinding
  • 机器 3 - 共享文件夹,其中 user1 有权写入该文件夹

理想情况下,WSHttpBinding 自动将安全上下文从应用程序传输到 WCF 服务,因此它应该能够在共享位置写入文件。因为,如果我们直接尝试将文件从机器 1 上的应用程序写入到机器 3 共享位置,它是成功的。

但是,令我们惊讶的是,它无法通过服务将文件写入共享位置。我们收到“拒绝访问”

正如我所说,我们正在使用 WSHttpBinding,理想情况下,用户上下文被传输到服务。在客户端,即机器1,模拟级别设置为System.Security.Principal.TokenImpersonationLevel.Impersonation;因此网络服务可以将自己模拟为 Domain\user1。这足以写入第三台机器的文件夹吗?

或者我们应该将 Client impersonation Level 设置为 System.Security.Principal.TokenImpersonationLevel.Delegation? (我们都试过了,都不行)

另外,还有一条信息: 机器 2 是“受信任的委托(delegate)”。在域 Controller 中为此机器设置了 SPN。

操作合约声明为

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 
public void WriteData(string content) 
{ 

}

我们仍然面临这个问题。

最佳答案

你需要delegation为了那个原因。模拟仅在机器 2 上具有本地作用域。

关于c# - WCF 的凭证委托(delegate)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6463776/

相关文章:

c# - 从列表 c# 中删除最后一个逗号或分隔符

c# - 过滤重复行

.net - 即使使用默认应用程序,Azure 诊断也不存储数据

c# - 通过 ADO.NET 数据服务重用现有类型

vb.net - WCF 服务 TcpNetBinding StreamRequest 未接收流

c# - 使用数组进行独特行程选择的最佳性能算法?

c# - 如何定义具有 N 个参数的委托(delegate)函数

c# - Silverlight 初始化组件

c# - 在集合中查找循环项(非传递项)

c# - 基于证书的认证基础