获取当前用户身份

本文关键字:身份 用户 获取 | 更新日期: 2023-09-27 18:13:57

我有一个向服务器发送调用的silverlight应用程序。服务器使用WCF服务来执行调用。我希望能够检查'AfterReceiveRequest'功能,如果执行调用的用户是我所期望的。如果不是,我想中止这个操作。

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

OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name

只有当我从Visual Studio运行应用程序时,它们才会给我正确的用户名,而不是在application Pool上。当我在应用程序池上运行应用程序时,我得到这两个参数的值:IIS appool 'MyApplicationPool。

客户端和服务器在同一台机器上,所以这看起来不像是双跳。

有人能帮忙吗?我需要这个工作在Windows和基本身份验证

获取当前用户身份

这些标识值来自用于WCF的身份验证方法。您应该发布您的WCF服务器端和客户端配置。要启用Windows身份验证,使用基于Windows身份验证的加密握手,请遵循本文的示例:

https://learn.microsoft.com/en-us/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 . IIS的观点——这不应该是一个问题。我想说的是,IIS服务不知何故不能访问Active Directory域。这可能是权限问题。但是,默认情况下,IIS应该以与Visual Studio相同的方式工作,因为Visual Studio只使用IIS Express。如果IIS配置了与IIS Express相同的用户名,那么它应该具有以相同方式通过域进行身份验证的访问权限。注意:ServiceSecurityContext.Current.PrimaryIdentity不是IIS用户名。