2013-07-02 12 views
6

Ich habe eine selbst gehostete SignalR-Instanz, die OWIN verwendet. Ich möchte die Autorisierung implementieren. Meine Benutzer haben sich bereits mit der Formularauthentifizierung bei einer ASP.NET MVC-Anwendung angemeldet.Akzeptieren von ASP.NET-Formularauthentifizierungs-Cookies in einer OWIN-gehosteten SignalR-Implementierung?

Da die beiden Anwendungen unter derselben URL verfügbar sind, werden die Cookies zwischen den beiden geteilt. Wie akzeptiere ich ein Formularauthentifizierungs-Cookie in einer selbst gehosteten SignalR-Anwendung?

Erläuterung: Ich spreche von einem Browser, der auf einen selbst gehosteten SignalR-Hub zugreift und dieselben Anmeldeinformationen verwendet, die für die Anmeldung bei einer separaten (aber verwandten und auf demselben Host installierten) IIS-Anwendung verwendet wurden.

Also, die Frage ist: Wie hänge ich in die SignalR-Server-Pipeline, um den Cookie .ASPXAUTH zu erfassen und damit den aktuellen Principal vor dem Aufruf des Hubs zu setzen?

Wenn es hilft, kann ich etwas Nancy in den Mix werfen.

+0

Haben Sie jemals eine Lösung für Ihr Problem gefunden? Ich versuche das gleiche (obwohl meine MVC-App und mein selbst gehosteter SignalR-Dienst sich auf verschiedenen Ports befinden). –

Antwort

0

Wenn Ihr Benutzer bereits authentifiziert und angemeldet sind, können Sie Folgendes überprüfen in Ihrem SignalR Hub:

Context.User.Identity.IsAuthenticated 

Assure diese Eigenschaft auf true gesetzt ist. Sie können diese Überprüfung im Konstruktor Ihres Hubs platzieren, um ihre Verbindung zu blockieren/zu entfernen. Wenn false, können Sie sie auf eine andere Seite umleiten.

+0

Die Authentifizierung findet in der MVC-Anwendung und nicht im Dienst statt. Der .ASPXAUTH-Cookie kann in beiden verwendet werden, aber wie hänge ich ihn in die SignalR- oder OWIN-Pipeline ein? –

+1

Roger, ich sehe was du suchst, aber hast das eigentlich nie versucht. Für die Verbindungsklasse gibt es eine Eigenschaft namens "CookieContainer". Dies findet sich in [Microsoft.AspNet.SignalR.Client.Connection] (http://msdn.microsoft.com/en-us/library/microsoft.aspnet.signal.client.connection.cookiecontainer (v = vs.111) .aspx) wo du es bekommen/setzen kannst. Innerhalb dieser können Sie Code von diesem [Antwort] (http://stackoverflow.com/questions/13022415/signalr-net-client-fails-to-connect-upd-how-to-set-auth-cookie) verwenden versuche es und füge es hinzu. – SeanPrice