2015-05-07 15 views
9

Ich habe ein Problem beim Zugriff auf einen Webservice mit impersonate ohne einen angegebenen Benutzer.Identitätswechsel funktioniert nur, wenn ein Benutzer angegeben wird

Works: <identity impersonate="true" userName="DOMAIN\USERNAME" password="MyPassword" />

nicht

<identity impersonate="true" /> 

Während Debuggen ich unten den Code verwendet, funktioniert die richtige Domäne und Benutzername verifiy verwendet wurden, sind sie.

System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

ist hier mehr meiner web.config

<authentication mode="Windows" /> 
<identity impersonate="true" /> 
<authorization> 
    <allow users="*" /> 
    <deny users="?"/> 
</authorization> 

Ich bin Anmeldung in der Eingabeaufforderung Bild unten enter image description here

Irgendwelche Ideen, warum es funktioniert nur, wenn ich einen Benutzer in die angeben web.config? Ich melde mich mit dem gleichen Domain\Username und Passwort, das ich in die <identity impersonate="true" userName="DOMAIN\USERNAME" password="MyPassword" />. Ich habe mit mehreren Konten versucht und sie alle arbeiten, wenn ich lege ihre Anmeldeinformationen in der web.config aber keine Arbeit mit Identität gesetzt, wie <identity impersonate="true" /> und Protokollierung in

EDIT Der Remoteserver hat einen Fehler zurückgegeben:. (403) Verboten . enter image description here

EDIT 2 Alles funktioniert gut, während die Fehlersuche und während der Dienst auf dem Server schlagen, die das IIS enthält es gehostet wird, ich mit mehreren Konten und sie alle Arbeiten versucht haben. Alles ist auf der gleichen Domain

+0

Ist die anonyme Authentifizierung in IIS aktiviert? Versuchen Sie, diesen Code zu debuggen: 'System.Web.HttpContext.Current.User.Identity.Name' –

+0

Anonymous ist derzeit in IIS deaktiviert – joetinger

+0

Ich habe den vorgeschlagenen Code ausprobiert und erhalte den erwarteten DOMÄNE-Benutzernamen. – joetinger

Antwort

3

Beachten Sie die folgenden Text aus https://support.microsoft.com/en-us/kb/306158

Impersonate a Specific User for All the Requests of an ASP.NET Application

To impersonate a specific user for all the requests on all pages of an ASP.NET application, you can specify the userName and password attributes in the tag of the Web.config file for that application. For example: Note The identity of the process that impersonates a specific user on a thread must have the "Act as part of the operating system" privilege. By default, the Aspnet_wp.exe process runs under a computer account named ASPNET. However, this account does not have the required privileges to impersonate a specific user. You receive an error message if you try to impersonate a specific user. This information applies only to the .NET Framework 1.0. This privilege is not required for the .NET Framework 1.1.

To work around this problem, use one of the following methods: Grant the "Act as part of the operating system" privilege to the ASPNET account (the least privileged account).

Note Although you can use this method to work around the problem, Microsoft does not recommend this method. Change the account that the Aspnet_wp.exe process runs under to the System account in the configuration section of the Machine.config file.

Sie könnten der Aspnet_wp.exe-Prozess Setup als Benutzer laufen Sie versuchen, die gewünschten Privilegien zum Imitieren zu erhalten.

Dies wird ebenfalls diskutiert vor: How do you do Impersonation in .NET?

1

Es könnte das NTLM-Double-Hop-Authentifizierung Problem sein. Kurz gesagt, stellen Sie sicher, dass Kerberos-SPNs ordnungsgemäß festgelegt sind, sodass sie anstelle von NTLM verwendet werden. Dieser MSDN-Blogpost hat eine großartige Erklärung.

http://blogs.msdn.com/b/besidethepoint/archive/2010/05/09/double-hop-authentication-why-ntlm-fails-and-kerberos-works.aspx

Alternativ Authentifizierung Grund oder Formulare werden auch erreichen, was Sie zu erreichen suchen. Dies liegt daran, dass die Anwendung über die Anmeldeinformationen des Benutzers verfügt und diese bei ordnungsgemäßer Konfiguration für den Zugriff auf Back-End-Ressourcen verwendet werden kann.

Sie können auch in Kerberos-Delegation suchen. Es ist eine Möglichkeit, diesen zweiten Hop über seinen SPN auf nur eine Ressource zu beschränken.

+0

danke für die Antwort. Ich hatte noch keine Gelegenheit, dies zu versuchen, aber nach dem Lesen des Artikels scheint es, als könnte es die Antwort sein – joetinger

+0

Nach dem Lesen dieser über die Einstellung von SPNs https://support.microsoft.com/en-us/kb/929650 wird dies gesetzt der Anwendungspool, um bei jedem Zugriff auf die Site die bereitgestellte Domäne/den Benutzer zu verwenden? – joetinger

+0

Nein. Von einer hohen Einstellung ist der SPN nur eine Möglichkeit, eine Ressource mit einem Konto zu registrieren. In diesem Fall registrieren Sie das für Ihre Website verwendete Konto. Auf diese Weise kann sich ein Benutzer, der sich über Kerberos authentifiziert, das Serviceticket, das vom Benutzer angezeigt wird, der den Zugriff anfordert, überprüfen/entschlüsseln. – user2320464

Verwandte Themen