问题总结:在 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 服务中,如果我们访问 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 个服务器变量是特殊的用户凭据。