2013-09-06 16 views
6

Es gibt viele Informationen zur Formularauthentifizierung oder Windows-Authentifizierung mit SignalR. Ich bin daran interessiert, meine eigene Authentifizierungs-DB zu verwenden. Ich benutze einen .NET-Client, weil der verbindende Agent ein Dienst ist, kein Webbrowser mit einem Menschen dahinter. Ich würde im Idealfall wie mein Client-Code verwenden:Wie verwende ich die benutzerdefinierte Standardauthentifizierung mit SignalR (.NET-Client)?

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

Und mein Server-Code verwenden, [autorisiert] auf den Naben und Context.User zur Verfügung zu mir hat. Alle Kommunikationen sind über https, also interessiert mich nicht einfacher Text.

Ich habe die asp.net basic authentication Anleitung gelesen, die zeigt, wie Sie den Authentifizierungsmechanismus mithilfe eines IHttpModule überschreiben. Der Header "Authorization" scheint jedoch niemals in den Anforderungen des .NET SignalR-Clients zu stehen, wenn ich den Code im HttpModule aufhalte.

Alles, was ich tun möchte, ist trivial übergeben Sie einen Benutzernamen und ein Passwort vom Client und Code, wie die Authentifizierung auf dem Server passiert. Ist das so schwer? Keine Magie. Kein Active Directory. Nur Authentifizierung von mir.

Meine aktuelle, funktionierende Methode besteht darin, benutzerdefinierte Header zu setzen, die auf der SignalR-Ebene interpretiert werden (mit einem benutzerdefinierten AuthorizeAttribute), aber anscheinend ist es nicht die richtige Authentifizierung, sondern die Autorisierungsebene Lass den Webserver das tun bevor irgendein SignalR Zeugs passiert.

Kann jemand bitte ein gutes Verfahren für vollständige, aber Schmutz-einfache, benutzerdefinierte Authentifizierung beschreiben?

Antwort

5

Kunde

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 Paket erforderlich: Microsoft.Owin.Security.Basic

Sie können eine vollständige Probe sehen here

+0

Die O Win Stuff ist, wenn du selbst gehostet bist, oder? Ich werde in IIS hosten und habe keine app.Anything() Ich denke. Ich bin überrascht, dass es nicht nur eine "ValidateUser-Methode geben und los geht's" – Robin

+0

Sie können Owin auf IIS –

+5

gehostet Ich habe den ganzen Tag für das Microsoft.Owin.Security.Basic NuGet-Paket gesucht. Es ist nicht mehr auf nuget.org. Ist es auf einem anderen NuGet-Server? Auf der Katana-Projektseite heißt es, das Paket sei mit der Version 2.0.0.0 veröffentlicht worden. Danke für die Hilfe. –

Verwandte Themen