2013-12-18 18 views
7

Używam uwierzytelniania WebApi i tokena dla moich kontrolerów APi. (Autoryzacja: nośnik xyzabc ..) Mam teraz węzeł signalR i chcę uwierzytelniać klientów przez ten sam token, który mają na kliencie bok.Nagłówek autoryzacji w SignalR 2.0

Jak to zrobić? Ten link pokazuje sposób wysyłania tokenu za pośrednictwem parametru URL, ale nie jestem pewien, w jaki sposób mogę go użyć i uwierzytelnić użytkownika po stronie serwera.

Odpowiedz

0

Nie wysłałbym tokena za każdym razem. Ustanowiłbym główną nazwę użytkownika kontekstu w wirtualnej metodzie OnConnected i odczytałam ciąg zapytania przesłany z tokena.

W moim przypadku. Właśnie stworzyłem klasę abstrakcyjną, która odziedziczyła po klasie Hub, a następnie wypchnęła tam moją logikę generowania roszczeń oauth. Potem moje regularne węzły betonowe odziedziczyłam po mojej podstawowej klasie niestandardowej.

Inną opcją byłoby użycie niestandardowego atrybutu autoryzacji lub innego modułu potoku piasty.

Myślę, że te taktyki mogą zachować DRY i przedłużać twój kod.

2

Rozwiązałem to, przekazując token jako parametr mojej metody Hub zamiast nagłówka. ale wyobrażam sobie, że można to zrobić również za pomocą nagłówków (po prostu wyodrębnienie tokena z Context.Headers lub coś podobnego).

Tak czy inaczej, po uzyskaniu tokena w metodzie koncentratora, po prostu użyj tego kodu.

public Task SendMessage(string message, string token) 
    { 
     var ticket = Startup.OAuthOptions.AccessTokenFormat.Unprotect(token); 
     bool isAuth = ticket.Identity.IsAuthenticated; 
     //You can retrieve other details like username and userid from ticket 
     ...rest of your code.. 
    } 
0

Odkryłem, że po wywołaniu domyślnej/obsługi tokenów z Web API z czegoś takiego jak JQuery, przeglądarka otrzymuje również plik cookie, który służy do uwierzytelnienia użytkownika za pomocą SignalR.

Powinieneś móc używać atrybutu [Autoryzuj], a także "Context.User.Identity" w metodach SignalR hub, aby uzyskać bieżącego użytkownika, pod warunkiem, że wywołałeś/Token z poprawnymi danymi uwierzytelniającymi z przeglądarka przed podłączeniem do koncentratora.

Powiązane problemy