由于某种原因,我无法在模拟呼叫中获取Windows用户名。 我遵循了答案 here,但没有得到相同的结果。
在服务器A上,我有一个intranett ASP.MVC应用程序,在IIS中只有Windows身份验证。
在服务器A上mvc应用程序的Web配置中,我使用模拟。
用于调用Web API的代码
var impersonationContext = WindowsIdentity.GetCurrent().Impersonate();
using (impersonationContext)
{
var client = GetHttpClient();
return await client.PostAsync("services/ExecuteCommand/Execute", httpContent);
}
private HttpClient GetHttpClient()
{
var httpClientHandler = new HttpClientHandler
{
UseDefaultCredentials = _commandServiceUseDefaultCredentials
};
var client = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(ConfigurationManager.AppSettings["CommandServiceBaseUrl"].ToString()),
};
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
在服务器B上,我有一个具有Windows身份验证的ASP.Net Web API(核心)项目
在服务器B上的Web api的Web配置中,使用Windows身份验证进行指定,但不能模拟。
我正在尝试为浏览我的mvc应用程序的用户获取Windows用户名。我已经尝试了很多,所以最终还是用这种方法把它们都弄了。
private string GetUserName()
{
var windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsIdentity windowsIdentity2 = null;
if (System.ServiceModel.OperationContext.Current != null)
if (System.ServiceModel.OperationContext.Current.ServiceSecurityContext != null)
windowsIdentity2 = System.ServiceModel.OperationContext.Current.ServiceSecurityContext.WindowsIdentity;
var httpContextIdentity = System.Web.HttpContext.Current.User.Identity;
return string.Format("{0}_{1}_{2}_{3}_{4}",
System.Environment.UserName ?? "",
User.Identity.Name,
windowsIdentity != null ? windowsIdentity.Name : string.Empty,
windowsIdentity2 != null ? windowsIdentity2.Name : string.Empty,
httpContextIdentity != null ? httpContextIdentity.Name : string.Empty);
}
这产生了这个结果
System.Environment.UserName:不带域的ServerB App_pool用户
User.Identity.Name:域\ ServerA $
System.Security.Principal.WindowsIdentity.GetCurrent()。名称:ServerB 域\ app_pool用户
System.ServiceModel.OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name: (空)
System.Web.HttpContext.Current.User.Identity:Domain \ ServerA $
那么我如何获得我的mvc应用程序最终用户的Windows用户名?