2017-02-17 4 views
0

Ich habe eine OWIN/Katana WebAPI, die Windows-Authentifizierung verwendet. Wenn ich es lokal ausführe, kann es meine Windows-Anmeldeinformationen aufnehmen. Wenn ich die Web-API auf einem Server/Cluster ausliege, werde ich jedoch ständig aufgefordert, mein Login und Passwort einzugeben.OWIN/Katana WebAPI mit Windows-Authentifizierung fragt nach Login/Passwort

Im Moment habe ich die folgenden in der Startup.cs:

//Set up integrated windows authentication. 
    HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"]; 
    listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication; 

Ich habe sogar versucht dies auch:

HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"]; 
    listener.AuthenticationSchemes = AuthenticationSchemes.Negotiate; 

In Fiddler, konnte ich meine API treffen (auf dem Server) durch Aktivieren der Authentifizierung. Aber wenn ich die API von einer anderen Anwendung verwende, kommt sie automatisch mit einem 401 Unauthorized zurück. Warum wird immer noch eine manuelle Anmeldung angefordert, obwohl ich die Windows-Authentifizierung ausdrücklich vorgenommen habe?

Ich habe diese Artikel wurden folgende:

http://www.sbrickey.com/Tech/Blog/Post/AllowAnonymous_for_OWIN_Katana_self_hosted_WebAPIs_using_Kerberos

https://blogs.msdn.microsoft.com/chiranth/2013/09/20/ntlm-want-to-know-how-it-works/

https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/enabling-windows-authentication-in-katana

+0

Eingabeaufforderung ist normal, wenn Ihre Anrufer keine Benutzeranmeldeinformationen übergeben. Sie müssen den richtigen clientseitigen Code schreiben. –

+0

Danke für die Antwort @LexLi - Warum ist das normales Verhalten? Sollten die Windows-Anmeldedaten des Client-Computers nicht automatisch übergeben werden? Warum hat es mich nicht angezeigt, wenn ich die API lokal auf Debug ausgeführt habe? Sorry für die dummen Fragen - ich bin noch neu bei auths. – Jacky

+0

Benutzeranmeldeinformationen werden nicht automatisch übergeben, besonders wenn Sie über Code anrufen. Selbst IE würde Sie auffordern, es sei denn, Sie haben es richtig konfiguriert. Es gibt zu viel zu lernen. –

Antwort

0

Ich fand, warum Client meine Web-out ist (dank @LexLi) scheitern. Ich dachte, dass das Problem in meiner API ist, aber es stellt sich heraus, dass ich nicht einmal meine Benutzeranmeldeinformationen vom Client gesendet habe. Ich habe die Benutzerdaten in den HttpHandler für meinen HttpClient hinzugefügt und es hat funktioniert.

new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }) 
Verwandte Themen