2013-07-03 7 views
13

Ich habe eine selbst gehostete SignalR Anwendung mit OWIN. Ich möchte Windows-Authentifizierung zu den eingehenden Anforderungen hinzufügen. Ist das möglich?Windows-Authentifizierung mit SignalR und OWIN-Self-Hosting

Ich glaube, dass ich z. Formularauthentifizierung via something like this.

Ich kann jedoch keine Möglichkeit finden, Windows-Authentifizierung zu verwenden, um etwas ähnliches zu tun.

Mein Fallback-Plan wäre, in IIS stattdessen zu hosten, aber ich würde es vorziehen, in der Lage zu sein, meine App als Windows-Dienst zu halten, wenn ich kann.

Antwort

24

Im Idealfall würde es eine NTLM owin middlware sein, aber da es keine gibt man kann, indem man einen Griff auf dem Httplistener und ermöglicht Auth auf diese Weise um ihn herum arbeiten (es ist nativ von Httplistener unterstützt):

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var listener = (HttpListener)app.Properties[typeof(HttpListener).FullName]; 
     listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm; 

     app.MapHubs(); 
    } 
} 
+0

Danke! Das sieht so aus, als ob es den Trick macht. Ich bekomme jetzt ein weiteres Problem, dass mit NTLM Auth aktiviert bekomme ich einen "Access-Control-Allow-Origin" Fehler. Das sieht so aus, als wäre es wahrscheinlich [hier] (https://github.com/SignalR/SignalR/issues/1735), also muss ich versuchen, den neuesten SignalR-Build zu bekommen, wenn ich einen Moment habe, es zu testen. –

+0

Ich nehme an, Sie aktivieren Cross-Domain. Lesen Sie diese http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#crossdomain – davidfowl

+0

Ja, ich denke, ich habe alles in Ordnung - sicherlich funktioniert es, wenn ich kommentiere die Zeile 'AuthenticationSchemes' aus. Ich habe eine [separate Frage] (http://stackoverflow.com/questions/17485046/signalr-cross-domain-connections-with-self-hosting-and-authentication) aufgeworfen, da es sich wie ein separates Problem anfühlt. –

3

Ich hatte das gleiche Problem wie Sie und entschied mich für die Implementierung einer NTLM/Windows-Authentifizierungs-Middleware.

Sie können es auf Nuget finden:

Install-Package Pysco68.Owin.Authentication.Ntlm 

Quellen und detailliertere Informationen darüber, wie zu verwenden, es ist awailable hier: https://github.com/pysco68/Pysco68.Owin.Authentication.Ntlm

Das minimale Anwendungsbeispiel könnte wie folgt aussehen:

public void Configuration(IAppBuilder app) 
{ 
    // use default sign in with application cookies 
    app.SetDefaultSignInAsAuthenticationType(
     DefaultAuthenticationTypes.ApplicationCookie); 

    app.UseCookieAuthentication(new CookieAuthenticationOptions() 
    { 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie     
    }); 

    // Enable NTLM authentication 
    app.UseNtlmAuthentication(); 

    // ..... 
} 

Bitte beachten Sie, dass ich mich aus Leistungsgründen entschieden habe, am Ende bei der Cookie-Authentifizierung zu bleiben und NTLM nur für die initiale Authentifizierung ro zu verwenden Und-Reise (wegen der hohen Anzahl von Anfragen).