2013-09-06 13 views
6

Ci sono molte informazioni su come fare l'autenticazione basata su form o l'autenticazione di Windows con SignalR. Sono interessato all'utilizzo del mio DB di autenticazione. Io uso un client .NET perché l'agente di connessione è un servizio, non un browser Web con un essere umano dietro di esso. Mi piacerebbe idealmente come il mio uso codice client:Come si utilizza l'autenticazione di base personalizzata con SignalR (client .NET)?

hubConnection.Credentials = new NetworkCredential(userName, password); 

E il mio codice server da utilizzare [Autorizza] sui mozzi e di avere Context.User a mia disposizione. Tutte le comunicazioni sono su https quindi non mi interessa il testo normale.

Ho letto la guida di asp.net basic authentication che mostra come sovrascrivere il meccanismo di autenticazione utilizzando un IHttpModule. Tuttavia, l'intestazione 'Autorizzazione' non sembra mai essere impostata nelle richieste provenienti dal client .NET SignalR quando interrompo il codice nel HttpModule.

Tutto quello che voglio fare è banalmente passare un nome utente e una password dal client e programmare come avviene l'autenticazione sul server. È così difficile? Nessuna magia Nessuna directory attiva. Solo l'autenticazione da parte mia.

Il mio attuale, lavorare, approccio è quello di impostare le intestazioni personalizzate che vengono interpretati a livello SignalR (utilizzando una consuetudine AuthorizeAttribute), ma a quanto pare 'il modo giusto per farlo' non è quello di fare l'autenticazione a livello di autorizzazione e invece fare in modo che il server web faccia ciò prima che accada qualsiasi cosa SignalR.

Qualcuno può descrivere una buona procedura per un'autenticazione completa, ma semplice e sporca, personalizzata?

risposta

5

client

var connection = new Connection(url + "/echo"); connection.Credentials = new NetworkCredential("user", "password"); await connection.Start();

Server

app.Map("/basicauth", map => { map.UseBasicAuthentication(new BasicAuthenticationProvider()); map.MapSignalR<AuthenticatedEchoConnection>("/echo"); map.MapSignalR(); });

NuGet pacchetto richiesto: Microsoft.Owin.Security.Basic

È possibile vedere un esempio completo here

+0

Il O vincere roba è se sei auto-ospitato, giusto? Sarò hosting in IIS e non avrò app.Anything() penso. Sono sorpreso che non ci sia solo un "fornire un metodo ValidateUser e partire" – Robin

+0

Puoi usare Owin ospitato su IIS –

+5

Ho cercato tutto il giorno per il pacchetto Microsoft.Owin.Security.Basic NuGet. Non è più su nuget.org È su un altro server NuGet? Sul sito del progetto Katana si dice che il pacchetto è stato rilasciato con la versione 2.0.0.0. Grazie per l'aiuto. –

Problemi correlati