查找 WCF 服务调用者的 Active Directory 域用户名

Posted

技术标签:

【中文标题】查找 WCF 服务调用者的 Active Directory 域用户名【英文标题】:Find a WCF service caller's Active Directory domain username 【发布时间】:2011-06-19 04:33:57 【问题描述】:

考虑使用WsHttpBinding 的 WCF 服务,仅允许域用户调用该服务。

如何找到调用者的 Active Directory 用户名?

【问题讨论】:

【参考方案1】:

获取System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name 属性的值。

只要安全模式与绑定的None 不同,您使用哪种绑定都没有关系。

如果安全模式是None,那么System.ServiceModel.ServiceSecurityContext.Current 将是null

【讨论】:

“你使用哪种绑定都没有关系”——我认为这是不正确的。对我来说,Name 属性仅填充了Windows 身份验证模式。【参考方案2】:

您可以通过调用获取用户的身份:

ServiceSecurityContext.Current.WindowsIdentity.Name

OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name

【讨论】:

【参考方案3】:

您必须将某种用户信息添加到您用于联系服务的消息结构中。

例如

public class UserInformation

  public string User  get; set; 
  public string Password  get; set; 


[DataContract]
public class Request

  [DataMember]
  public UserInformation User  get; set; 
  [DataMember]
  public MyRequest RequestBody  get; set; 

通过这种方式,您可以在客户端查询活动目录、填充 UserInformation 对象并将用户详细信息作为消息结构的一部分发送。

【讨论】:

以上是关于查找 WCF 服务调用者的 Active Directory 域用户名的主要内容,如果未能解决你的问题,请参考以下文章

自托管 WCF 服务和 basicHttpBinding:绑定不提供表示调用者的 Windows 标识

WCF 服务慢速调用取决于调用者

在 WCF 中获取调用者的主机名

更改 WCF 服务以与 .NET Framework 和 .NET Core 调用者兼容

我可以使用调用者的信用来打数据库的 WCF 调用吗?

WCF