Ich habe eine WebAPI
Lösung und ich benutze token authentication
, also ist der Ablauf folgender:
username
und password
anzumelden
AJAX
Anfragen) platziert zu werden. Jetzt kommt SignalR
ins Spiel. Da WebSockets
verwendet wird, können Sie keinen Header übergeben.
Auf der Suche nach einer Lösung bin ich auf folgendes gestoßen:
SignalR
- keine Option, da SignalR
longPolling
verwendet. $.signalR.ajaxDefaults.headers = { Authorization: "Bearer " + token };
Übergeben Sie dasselbe token
, das für die Authentifizierung von WebAPI
-Aufrufen als query string
verwendet wurde, oder speichern Sie es in einem Cookie für SignalR
und erstellen Sie dann einen Anbieter, der das Token irgendwie auspackt und in Identität erweitert. Ich bin diesem Blogpost gefolgt , aber ich vermisse ihn anscheinend etwas.
Übergeben Sie das Token erneut als query string
/ oder als Cookie, aber erstellen Sie diesmal ein benutzerdefiniertes Authorize Attribute
to Authorize
SignalR
Hubs oder Methoden.
Nochmal ein Blogbeitrag dazu . Das Problem mit dieser Lösung war in Unprotect
Methode auf dem Token.
Die letzte und einfachste Lösung besteht darin, auch cookie authentication
zu aktivieren, weiterhin bearer token authentication
für WebAPI
-Anrufe zu verwenden und die OWIN Middleware
-Anrufe auf den Hubs zuzulassen. (Diese Lösung funktioniert tatsächlich).
Nun ist das Problem, dass die Standardvorlage für eine WebAPI
-Anwendung mit Individual User Accounts
(also mit Tokenauthentifizierung) verwendet wird, wenn ich eine AJAX
-Anfrage an die API
sende, sendet sie auch das Cookie.
Selbst wenn ich das tat:
%Vor% Siehst du eine einfachere Möglichkeit, SignalR
mit Token-Authentifizierung zu authentifizieren? Ist dieser finale Ansatz (wenn es mir gelingt, das Senden des Cookies mit Anfragen zu unterdrücken) in der Produktion lebensfähig?
Bei der Arbeit an diesem speziellen Projekt habe ich einfach Cookie-Authentifizierung und CSRF verwendet, aber ich war immer noch daran interessiert zu sehen, wie WebApi und SignalR mit Bearer-Token-Authentifizierung authentifiziert werden.
Ein funktionierendes Beispiel finden Sie in diesem GitHub-Repository.
Ich habe schließlich eine OAuthBearerTokenAuthenticationProvider
-Klasse erstellt, die versucht, das Token vom Cookie abzurufen.
Und hier ist die Methode in der Klasse Startup
, die sich mit der Authentifizierung beschäftigt:
Ein funktionierendes Beispiel finden Sie in diesem GitHub-Repository.
Hoffe das hilft jemandem irgendwann.
Tags und Links asp.net-web-api asp.net signalr authentication cookies