2

使用场景 三台机器都在同一个域中

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

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

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

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

或者我们应该将客户端模拟级别设置为 System.Security.Principal.TokenImpersonationLevel.Delegation?(我们都试过了,但没有用)

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

操作合约声明为

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

}

我们仍然面临这个问题。

4

1 回答 1

1

为此,您需要授权。模拟仅在机器 2 上具有本地范围。

于 2011-06-24T08:25:27.483 回答