WebAPI & SignalR-Webanwendung - Authentifizieren und Autorisieren

8

Ich habe eine WebAPI Lösung und ich benutze token authentication , also ist der Ablauf folgender:

  • Benutzer versucht sich mit den username und password anzumelden
  • Wenn die Zugangsdaten korrekt sind, erhält er ein Token, um in den folgenden Anfragen (in der Kopfzeile der 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:

  1. Übergeben Sie eine Überschrift an SignalR - keine Option, da SignalR longPolling verwendet.

$.signalR.ajaxDefaults.headers = { Authorization: "Bearer " + token };

  1. Ü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.

  2. Ü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.

  3. 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.

%Vor%

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?

    
radu-matei 04.09.2015, 11:06
quelle

1 Antwort

0

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.

%Vor%

Und hier ist die Methode in der Klasse Startup , die sich mit der Authentifizierung beschäftigt:

%Vor%

Ein funktionierendes Beispiel finden Sie in diesem GitHub-Repository.

Hoffe das hilft jemandem irgendwann.

    
radu-matei 24.04.2016, 18:06
quelle