SignalR - Wie erstelle ich einen benutzerdefinierten Authentifizierungsmechanismus basierend auf dem HTTP-Header?

9

Ich verlasse alte Version der Frage auf einem Boden.

Ich möchte eine benutzerdefinierte Authentifizierung für SignalR-Clients implementieren. In meinem Fall sind dies Java-Clients (Android). Nicht Webbrowser. Es gibt keine Formularauthentifizierung, es gibt keine Windows-Authentifizierung. Das sind einfache HTTP-Clients mit Java-Bibliothek.

Nehmen wir also an, der Client übergibt beim Verbinden mit HUB den benutzerdefinierten Header. Ich muss irgendwie Benutzer basierend auf diesem Header authentifizieren. Dokumentation hier erwähnt, dass es möglich ist, gibt aber keine Details zur Umsetzung.

Hier ist mein Code von Android Seite:

%Vor%

P.S. Die ursprüngliche Frage unten war mein Wunsch, die Angelegenheit zu "vereinfachen". Weil ich Zugriff auf Header in OnConnected Callback bekomme. Ich dachte, es gibt eine einfache Möglichkeit, die Verbindung direkt dort zu beenden.

Verwenden von Signal R mit einem benutzerdefinierten Authentifizierungsmechanismus. Ich überprüfe einfach, ob der Verbindungs-Client bestimmte Header mit der Verbindungsanforderung übergeben hat.

Die Frage ist: Wie kann ich Benutzer, die meinen Scheck nicht bestehen, VERANKERN oder NICHT? Dokumentation hier erklärt dieses Szenario nicht wirklich. Es wird erwähnt, dass Zertifikate / Header verwendet werden - aber keine Beispiele, wie sie auf dem Server verarbeitet werden. Ich verwende keine Formular- oder Windows-Authentifizierung. Meine Benutzer - Android Java-Geräte.

Hier ist Code von meinem Hub, wo ich die Verbindung ablehnen möchte.

%Vor%     
katit 29.07.2016, 16:55
quelle

1 Antwort

5

Also habe ich gerade ein benutzerdefiniertes Autorisierungsattribut erstellt und die Methode AuthorizeHubConnection überschrieben, um Zugriff auf die Anfrage zu erhalten und die Logik implementiert, die Sie mit dem Header zu tun versucht haben, und es scheint zu funktionieren.

%Vor%

Hub

%Vor%

Was ergibt dies in der Konsole (wenn das Bild nicht angezeigt wird, ist es ein [Failed to load resource: the server responded with a status of 401 (Unauthorized)] ):

    
Mark C. 01.08.2016, 19:06
quelle

Tags und Links