2013-07-03 5 views
13

Ho un'applicazione auto-ospitata SignalR utilizzando OWIN. Vorrei aggiungere l'autenticazione di Windows alle richieste in arrivo. È possibile?Autenticazione di Windows con self-hosting SignalR e OWIN

Credo di poter aggiungere per es. Autenticazione moduli via something like this.

Tuttavia non riesco a trovare alcun modo per utilizzare l'autenticazione di Windows per fare qualcosa di simile.

Il mio piano di riserva sarebbe quello di ospitare in IIS, ma preferirei poter mantenere la mia app come servizio di Windows, se possibile.

risposta

24

Idealmente ci sarebbe un NTLM Owin middlware ma dal momento che non c'è nessuno si può lavorare intorno ad esso da ottenere una maniglia sul HttpListener e consentendo auth in questo modo (è nativamente supportato da HttpListener):

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

     app.MapHubs(); 
    } 
} 
+0

Grazie! Sembra che stia facendo il trucco. Ora sto riscontrando un ulteriore problema che con NTLM auth abilitato ottengo un errore 'Access-Control-Allow-Origin'. Sembra che sia stato probabilmente corretto [qui] (https://github.com/SignalR/SignalR/issues/1735) quindi dovrò provare ad ottenere l'ultima build SignalR quando avrò un momento per provarlo. –

+0

Suppongo che tu abiliti il ​​dominio incrociato. Leggi questo http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#crossdomain – davidfowl

+0

Sì, penso di aver capito bene - sicuramente funziona se commento fuori la linea 'AuthenticationSchemes'. Ho sollevato una [domanda separata] (http://stackoverflow.com/questions/17485046/signalr-cross-domain-connections-with-self-hosting-and-authentication) in quanto sembra che questo sia un problema separato. –

3

Stavo affrontando lo stesso tuo problema e ho deciso di implementare un middleware di autenticazione NTLM/Windows;

Si può trovare su Nuget:

Install-Package Pysco68.Owin.Authentication.Ntlm 

Fonti e informazioni più dettagliate su come-usarlo sono awailable qui: https://github.com/pysco68/Pysco68.Owin.Authentication.Ntlm

L'esempio di utilizzo minimo potrebbe essere simile:

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(); 

    // ..... 
} 

Si prega di notare che, per motivi di prestazioni, ho deciso di mantenere l'autenticazione Cookie alla fine e di utilizzare NTLM solo per l'autenticazione iniziale ro und-trip (a causa dell'elevato numero di richieste).