【问题标题】:Retrieving original user identity from web application从 Web 应用程序中检索原始用户身份
【发布时间】:2013-01-14 09:49:28
【问题描述】:

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

说明:

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

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

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

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

但是,当在 Web 服务中切换到联合身份验证和 .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 个服务器变量是特殊的用户凭据。

【问题讨论】:

  • web应用和web服务的具体路径是什么(出于安全考虑可以替换域名)?
  • 它们托管在同一台服务器上,IIS 7.5,它们被称为contoso.com/webinterfacecontoso.com/webadminservice
  • 这种情况下,有没有查看本页备注:HttpWebRequest.PreAuthenticate Property?也许你不应该设置proxy.PreAuthenticate = false;
  • 对不起,意思是:你应该设置proxy.PreAuthenticate = false;
  • 谢谢@Alex,但结果是一样的。在备注中它说“如果身份验证方案不支持预身份验证,则忽略此属性的值。”。我不确定联合身份验证是否支持预身份验证,我在网上找不到任何东西

标签: c# web-services credentials


【解决方案1】:

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

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

【讨论】:

  • 嗨@Rohit,感谢您的回答。不幸的是,这也会返回特殊凭据。我已经尝试了以下所有方法: User.Identity;用户.人; Context.Request.LogonUserIdentity.Name; Context.Request.ServerVariables["AUTH_USER"]。他们都返回调用的凭据,而不是原始用户
  • 您是否尝试在调用 web 服务之前检索凭据,我的意思是在将凭据设置为代理之前
  • 如果它们未分配,我无法获取凭据,因为对象未设置为引用。如果我设置 proxy.UseDefaultCredentials = true;它是 Web 应用程序专用帐户(应用程序池的标识)。我从网络服务返回 401,因为它不允许调用网络服务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 2011-12-14
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多