在C#Asp .Net WCF中从Context获取UserName

时间:2017-05-28 19:28:50

标签: c# asp.net .net wcf visual-studio-2012

我目前维护着一个遗留应用程序,我正努力让它更具可测性,因为我发布了新功能。该应用程序托管在IIS上,是.net 4.5上的WCF休息服务,它公开了几种不同的服务操作。在我试图让事情变得更好的过程中,我遇到了从context获取用户名的问题。

我真的不知道应用程序中有这么多不同的上下文,特别是当你真正想要的是用户名或者只是伪造一些标题时。我目前所知道的三个是:

所有这三个都有关于MSDN的精彩文档,这就是我在上面的项目符号中发布相应链接的原因。因此,通过指导我的文档并没有比我迄今为止搜索到的更有用。

我的问题/问题有点相关,所以我把它编成一个。

我在https://stackoverflow.com/a/18777835/2262959处从这个简单的答案中了解到了WebOperationContext和HttpContext之间的真正区别(尽管他没有说明他从哪里得到这些信息,我相信它隐藏在msdn或个人经验的某处) 。

  1. 前面提到的两个上下文如何与OperationContext相关,从名称猜测,我有点觉得,我可以使用这个或其他两个来控制其他两个中的任何一个。
  2. 我是否可以始终依靠OperationContext获取当前用户名或获取(甚至伪造)HttpRequest标头?或者我是否总是必须依赖特定的一个来检索用户信息?
  3. 如果我的目的是伪造一个上下文来实现我想要的东西,哪个是我应该伪造的? (我在我的项目中使用FakeItEasy
  4. 目前我的代码是这样的:

    if (OperationContext.Current != null && OperationContext.Current.ServiceSecurityContext != null)
      return OperationContext.Current.ServiceSecurityContext.WindowsIdentity;
    if (HttpContext.Current == null) return WindowsIdentity.GetCurrent();
    if (HttpContext.Current.User != null)
    {
      return HttpContext.Current.User.Identity as WindowsIdentity;
    }
    return WindowsIdentity.GetCurrent();
    

    我希望这段代码能说清楚我为何如此困惑。我真的不知道要依赖什么来获取当前用户身份,从源存储库更改说明,有人提到HttpContext.Current并不总是提取正确的用户,因此必须检查{{1} }。何时以及为何会发生这种情况?我不知道。

    我很乐意甚至从书中读到它,但我真的不知道该依赖什么。

0 个答案:

没有答案