三台机器都在同一个域中
- 机器 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)
{
}
我们仍然面临这个问题。