WCF的凭证授权问题

时间:2011-06-24 05:26:45

标签: c# .net wcf credentials networkcredentials

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

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

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

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

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

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

另外,另一条信息: 机器2“被委托信任”。在域控制器中为此计算机设置了SPN。

操作合同声明为

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

}

我们仍然面临这个问题。

1 个答案:

答案 0 :(得分:1)

您需要delegation。模拟在机器2上只有本地范围。