从Web应用程序检索原始用户标识

时间:2013-01-14 09:49:29

标签: c# web-services credentials

问题摘要:在ASP.net中,如果使用凭据调用Web服务,如何检索登录到调用Web服务的Web应用程序的原始用户?

解释

我们有一个Web应用程序,调用Web服务。两者都是ASP.NET,目前是2.0。

用户登录到Web应用程序(Windows身份验证),但要调用Web服务,我们使用特定凭据:

   proxy.PreAuthenticate = true;
   proxy.Credentials = new System.Net.NetworkCredential(UserName, Password);

从调用的Web服务中,如果我们访问webservice类(WebService.User.Identity)的identity属性,将获取登录的原始用户,而不是这些凭据。

但是,当在Web服务中切换到Federation Authentication和.NET 4时,现在WebService.User.Identity将检索特殊凭据。

总结一下,使用相同的凭据调用相同的Web方法,WebService.User.Identity返回:

  • .NET 2 + Windows身份验证:登录用户的原始用户名

  • .NET 4 +联合身份验证:方法调用中使用的凭据

如何更改它以使原始用户使用联合身份验证登录.NET 4?

修改 更多信息,在.NET 2中,与用户相关的服务器变量是:

  • AUTH_USER:用户已登录
  • LOGON_USER:特殊用户凭据
  • REMOTE_USER:用户已登录

正如我所说,在.NET 4中,3个服务器变量是特殊的用户凭证。

1 个答案:

答案 0 :(得分:0)

您好,您可以尝试使用以下代码来获取原始登录用户:

        string serverVariable = Request.ServerVariables["AUTH_USER"].ToString();
        string[] authUser = serverVariable.Split('\\');
        string strUserName = authuser[0];
        string strDomain = authUser[1];