ASP.NET-Web-API-Windows-Authentifizierung erhält Benutzernamen bei einem imitierten AufrufC#

Ein Treffpunkt für C#-Programmierer
Guest
 ASP.NET-Web-API-Windows-Authentifizierung erhält Benutzernamen bei einem imitierten Aufruf

Post by Guest »

Aus irgendeinem Grund kann ich bei einem imitierten Anruf den Windows-Benutzernamen nicht ermitteln.
Ich habe die Antworten hier befolgt, erhalte jedoch nicht das gleiche Ergebnis.
Auf Server A habe ich eine Intranet-ASP.NET-MVC-Anwendung mit nur Windows-Authentifizierung in IIS.
[img]https://i .sstatic.net/q2Xha.jpg[/img]

In der web.config für die ASP.NET MVC-Anwendung auf Server A verwende ich Identitätswechsel.
Image

Code zum Aufrufen der 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;
}

Auf Server B habe ich ein ASP.NET Core-Web-API-Projekt mit Windows-Authentifizierung
Image

In der web.config für die Web-API auf Server B a geben Sie die Verwendung der Windows-Authentifizierung an, aber KEIN Identitätswechsel.
Image

Ich versuche, den Windows-Benutzernamen für die Person zu erhalten, die mein ASP.NET durchsucht Kern-MVC-Anwendung. Ich habe viel versucht und bin am Ende zu dieser Methode gekommen, um sie alle zu bekommen.
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);
}

Dies ergibt dieses Ergebnis

System.Environment.UserName: ServerB App_pool-Benutzer ohne Domäne
User.Identity.Name: Domain\ServerA$
System.Security.Principal.WindowsIdentity.GetCurrent().Name: ServerB
domain\app_pool user< /p>
System.ServiceModel.OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name:
(null)
System.Web.HttpContext.Current.User.Identity: Domäne \ServerA$

Wie kann ich also den Windows-Benutzernamen für den Endbenutzer meiner ASP.NET Core MVC-App erhalten?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post