繁体   English   中英

WCF-获取当前用户身份

[英]WCF - Get Current User Identity

我有一个将呼叫发送到服务器的Silverlight应用程序。 服务器使用WCF服务执行呼叫。 我希望能够检查“ AfterReceiveRequest”功能是否执行呼叫的用户是我期望的用户。 如果不是-我想中止该操作。

问题是-我无法正确获取IIS用户名。 我尝试了以下属性:

OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name

仅当我从Visual Studio运行应用程序时,它们才给我正确的用户名,而不是在应用程序池中。 当我在“应用程序池”上运行该应用程序时,我同时获得了两个参数的值:IIS APPPOOL \\ MyApplicationPool。

客户端和服务器在同一台计算机上,因此这似乎不像是一跳。

有人可以帮忙吗? 我需要在Windows和Basic身份验证中都可以使用。

这些身份值来自用于WCF的身份验证方法。 您应该发布WCF服务器端和客户端配置。 要启用Windows身份验证,该方法使用基于Windows身份验证的加密握手功能,请按照以下示例操作:

https://docs.microsoft.com/zh-cn/dotnet/framework/wcf/how-to-secure-a-service-with-windows-credentials

完成这项工作后,您将可以在此处查看Windows身份:

ServiceSecurityContext.Current.PrimaryIdentity

关键是在服务器端的绑定级别上打开安全模式。

在代码中:

    var myBinding = new WSHttpBinding();
    myBinding.Security.Mode = SecurityMode.Message;

在配置中:

<bindings>  
  <wsHttpBinding>  
   <binding name = "wsHttpBinding_Calculator">  
     <security mode="Message">  
       <message clientCredentialType="Windows"/>  
     </security>  
    </binding>  
  </wsHttpBinding>  
</bindings> 

我认为clientCredentialType =“ Windows”甚至不是必需的,因为如果未指定它,您仍然仍然可以获取Windows用户身份。

回应您关于VS vs. IIS的观点-这不应该成为问题。 我要说的是,IIS服务以某种方式无法访问Active Directory域。 这可能是权限问题。 但是,默认情况下,IIS应该以与Visual Studio相同的方式工作,因为Visual Studio仅使用IIS Express。 如果IIS使用与IIS Express相同的用户名配置,则它应该有权以相同的方式通过域进行身份验证。 注意:ServiceSecurityContext.Current.PrimaryIdentity不是IIS用户名。 这是Windows用户名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM