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
Antwort
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.
Die Middleware ist da, nur die qs ist zu lang –
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? –
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. –
- 1. .NET Core SignalR 2 Serialisierung (Datetime)
- 2. Übergabe von Daten von Sicht zu Partial in. NET CORE
- 3. SqlClient Masseneinfügung ohne DataTable in .Net Core
- 4. Benutzereigenschaft des angemeldeten Benutzers in .NET Core
- 5. OAuth2-Authentifizierung für Websockets: Übergabe des Träger-Tokens über Subprotokolle?
- 6. Abfragezeichenfolge in ASP.Net Core Razor-Ansicht
- 7. Headers in SignalR Antwort
- 8. Verwendung von SignalR in ASP.NET Core 1.0
- 9. SignalR .NET-Client trennt
- 10. Seeding in .Net Core
- 11. ExecuteSqlCommand in .NET Core
- 12. RNGCryptoServiceProvider in .Net Core
- 13. Umgehung der Formularauthentifizierung bei Übergabe einer Abfragezeichenfolge
- 14. Sitzung in .NET Core 1.1
- 15. JSON-Array ohne Übergabe des Array-Namens?
- 16. Validierung des OAuth2-Tokens in WSO2
- 17. Analog System.Dynamic.ExpandoObject in .NET Core
- 18. Raw SQL in .NET Core
- 19. Analog System.Security.Permissions in .NET Core
- 20. CERTENROLLLib Alternativen in .Net-Core
- 21. Rss-Parsing in .NET Core
- 22. System.Environment in .NET Core 1.0
- 23. DB-Ansicht in .NET Core
- 24. Assembly.GetExecutingAssembly() in .NET Core verfügbar?
- 25. Benutzerdefiniertes Autorisierungsattribut in .NET Core
- 26. WebUtility.HtmlDecode Ersatz in .NET Core
- 27. Crossgen Kompilierung in .NET Core
- 28. Öffnen des Bildes über den Standard-Viewer in .NET Core
- 29. Transitive Referenzen in .Net-Core 1.1
- 30. Abfragezeichenfolge mit Angabe des Begriffs in ElasticSearch
Mögliches Duplikat von [SignalR und OpenId Connect] (http://stackoverflow.com/questions/40806171/signalr-and-openid-connect) –
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. –
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