2016-12-16 3 views
13

Ich verwende JWT-Authentifizierungstoken in einer ASP .NET Core Web API-Anwendung. Die Tokens werden von der API selbst und nicht von Dritten generiert. Ich habe SignalR erfolgreich dem Stack hinzugefügt, aber jetzt muss ich die Benutzer authentifizieren, die versuchen, Server (Hub) -Methoden auszuführen. Jemand schlug vor, das Token in der Eigenschaft "qs" in JavaScript zu übergeben. Dies wird nicht funktionieren für mich als unsere Tokens sind wirklich groß (sie enthalten viele Ansprüche). Ich habe versucht, eine benutzerdefinierte Middleware zu schreiben, um das Token aus der Payload zu lesen und den Benutzer automatisch zu authentifizieren. Das Problem ist, dass bei der Verwendung von WebSockets die Middleware nicht ausgeführt wird. Irgendwelche Ideen werden helfen.JWT-Authentifizierung in SignalR (.NET Core) ohne Übergabe des Tokens in Abfragezeichenfolge

+0

Mögliches Duplikat von [SignalR und OpenId Connect] (http://stackoverflow.com/questions/40806171/signalr-and-openid-connect) –

+2

Dies ist kein Duplikat, da ich den Query String nicht verwenden kann alle meine Token sind zu lang und ich bekomme einen 414 Fehler. Ich möchte etwas wie eine benutzerdefinierte Middleware erstellen, die das Token aus der SignalR-Nachricht extrahiert und den Benutzer dann anmeldet. –

+0

Leider gibt es nur zwei Möglichkeiten, das Token zu übergeben - entweder Abfragezeichenfolge oder als Parameter. Hoffentlich wird dies in der nächsten Version von SignalR angesprochen werden. – mikebridge

Antwort

5

Werfen Sie einen Blick auf Artikel, der schlägt vor, Abfragezeichenfolge Authenticate against a ASP.NET Core 1.0 (vNext) SignalR application using JWT zu verwenden. Ich weiß, dass Ihr Token zu lang ist, aber der Autor erklärt, wie man Middleware verwendet, um die Anfrage zu authentifizieren. Hier

ist die Zusammenfassung aus dem Artikel:

  • SignalR haben keinen speziellen Authentifizierungs-Mechanismus eingebaut, es den Standard ASP.NET-Authentifizierung verwendet.
  • JWT ist in der Regel in der Autorisierungs-Header einer Anfrage
  • Die SignalR JavaScript-Client-Bibliothek Sie Header in den Anforderungen senden nicht enthalten die Mittel gesendet es jedoch nicht erlauben, eine Abfrage-String
  • passieren Wenn wir passieren Mit dem Token in der Abfragezeichenfolge können wir eine Middleware schreiben, die einen Autorisierungsheader mit dem Token als Wert hinzufügt. Dies muss das „Bearer“ bewusst
  • sein Formats in der Pipeline vor der Jwt Middleware erfolgen

ich den Schlüssel Punkt hervorgehoben habe, dass Ihre benutzerdefinierte Middleware vor Jwt Middleware registriert werden soll.

+0

Die Middleware ist da, nur die qs ist zu lang –

+0

Ich verstehe, dass Sie qs ist lang. Können Sie das Token in Payload einbetten und die Middleware verwenden, um es zu dekodieren, bevor Sie es früher registrieren? –

+0

Okay, ich denke, Sie haben möglicherweise keinen Zugriff auf die Payload in der Middleware vor SignalR. In diesem Fall können Sie beim Lesen der Nutzdaten einen benutzerdefinierten Parser für das Token in Ihrem Anwendungscode implementieren. Sie können das Autorisierungsattribut nicht verwenden, aber Sie können die Ansprüche des Benutzers und all das überprüfen. –