2017-11-28 1 views
1

Ich habe eine selbst gehostete Web-API-Anwendung (die Server-Anwendung), die Windows-Authentifizierung verwendet.Windows-Authentifizierung auf web.api

Windows-Auth in Startup.cs/Configuration, indem die folgenden AuthenticationSchemes aktiviert auf System.Net.HttpListener

System.Net.HttpListener listener = (System.Net.HttpListener)appBuilder.Properties["System.Net.HttpListener"]; 
listener.AuthenticationSchemes = System.Net.AuthenticationSchemes.IntegratedWindowsAuthentication 
        | System.Net.AuthenticationSchemes.Anonymous; 

und Controller verwenden Sie dann die [autorisieren] Tag. Ich kann dann die Principal.Identity aus dem HttpRequestContext für jede Controller-Methode extrahieren, um zu sehen, wer den Anruf tätigt.

Es scheint, dies funktioniert nur, wenn der Anrufer und der Server auf dem gleichen Host sind. Sobald sich die aufrufende Anwendung auf einem anderen Host befindet, werden alle Anfragen mit einem nicht autorisierten 401 blockiert und es wird niemals eine Controller-Methode auf dem Server getroffen. Dies ist auch dann der Fall, wenn die aufrufende Anwendung unter demselben Benutzerkonto wie der Server ausgeführt wird. Ist also eine spezielle Konfiguration erforderlich, damit die Windows-Authentifizierung auf web.api auf verschiedenen Computern funktioniert?

Grüße meisterd

+0

Edit: Ich habe versucht, einige Spuren mit Fiddler zu tun, und wenn Fiddler aktiviert ist, scheinen die Anforderungen zu arbeiten (ich drei Anfrage sehen, die ausgeführt werden) – meisterd

+0

Ist Gibt es einen anderen Proxy als Fiddler zwischen diesen Rechnern und dem Server? Da NTLM/Kerberos keine Authentifizierung durch Proxy zulassen. – Jimi

Antwort

0

In der Startklasse Ihres WebAPI, einen Anruf hinzufügen CORS zu verwenden. Möglicherweise müssen Sie Microsoft.Owin zu Ihren Paketen hinzufügen, wenn Sie es nicht bereits haben. Dies sollte den Zugriff von anderen Hosts auf Ihre API ermöglichen.

Es sollte wie folgt aussehen:

public class Startup 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
     HttpConfiguration config = new HttpConfiguration(); 
     WebApiConfig.Register(config); 

     //... Your other startup code 

     appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
+0

Wir werden das in Kürze versuchen. Ich habe mir nur die Spuren von Wireshark aus einer funktionierenden (fiddler active) und nicht funktionierenden Anfrage angesehen - der Unterschied ist, dass ich KRB Error: KRB5KRB_AP_ERR_MODIFIED im nicht funktionierenden Beispiel sehe. Das scheint darauf hinzuweisen, dass es ein Kerberos-Problem gibt. Seltsam, dass es weggeht, wenn Fiddler läuft. – user3566056

Verwandte Themen