C# 从web应用程序检索原始用户标识

C# 从web应用程序检索原始用户标识,c#,web-services,credentials,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, Pass

问题摘要:在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类的identity属性(
webservice.User.identity
),它将获取登录的原始用户,而不是这些凭据

但是,在web服务中切换到联合身份验证和.NET 4时,现在WebService.User.Identity将检索特殊凭据

总之,使用相同的凭据调用相同的web方法,WebService.User.Identity返回:

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

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

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

编辑: 更多信息,在.NET 2中,与用户相关的服务器变量包括:

  • 验证用户:已登录的用户
  • 登录用户:特殊用户凭据
  • 远程用户:已登录的用户

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

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

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

web应用程序和web服务的确切路径是什么(出于安全原因,您可以替换域名)?它们托管在同一台服务器IIS 7.5中,它们被调用,在本例中,您是否检查了此页上的备注:?也许你不应该设置proxy.PreAuthenticate=false。抱歉,意思是:您应该设置
proxy.PreAuthenticate=false谢谢@Alex,但结果是一样的。在备注中,它表示“如果身份验证方案不支持预身份验证,则忽略此属性的值。”。我不确定联邦身份验证是否支持预身份验证,我在onlineHi@Rohit上找不到任何东西,谢谢你的回答。不幸的是,这也会返回特殊凭证。我尝试了以下所有方法:User.Identity;用户。个人;Context.Request.LogonUserIdentity.Name;Context.Request.ServerVariables[“AUTH_USER”]。它们都返回调用的凭据,而不是原始用户在调用webservice之前是否尝试过检索凭据我的意思是在将凭据设置为代理之前如果未分配凭据,则无法获取凭据,因为对象未设置为引用。如果我设置proxy.UseDefaultCredentials=true;它是web应用程序专用帐户(应用程序池的标识)。我从web服务返回401,因为它不允许调用web服务。