Utworzyłem usługę ServiceStack na górze Asp.Net, która implementuje uwierzytelnianie podstawowe. Wszystko działa dobrze na trasach usług. Mogę się zalogować i otrzymuję ciasteczka sesyjne, które są sprawdzane przy kolejnych połączeniach. Używam HttpClient dla tych żądań.Uwierzytelnianie SignalR Hub przy użyciu ServiceStack Authentication Plugin
Posiadam również Hub SignalR, który działa na tej samej usłudze Asp.Net, ale Zleceniodawca nie jest uwierzytelniony w moich metodach Hub.
Zasadniczo potrzebuję, aby ServiceStack przechwycił połączenia do mojego centrum i zweryfikował plik cookie sesji i zapełnił Context.User.Identity i oznaczył go jako uwierzytelniony. Jeśli uda mi się uzyskać tę konfigurację, prosty atrybut [Authorize] w moim hubie zajmie się resztą.
Oto przykład z mojego kodu:
// set up a HttpClient with a cookie container to hold the session cookie
var cookieJar = new CookieContainer();
var handler = new HttpClientHandler { CookieContainer = cookieJar, UseCookies = true, UseDefaultCredentials = false };
var client = new HttpClient(handler) { BaseAddress = _baseUri };
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", userName, password))));
// do client login and get response with session cookie...
var response = client.PostAsync(...);
// add the cookies to the SignalR hub connection
var responseCookies = cookieJar.GetCookies(_baseUri);
var cookieContainer = new CookieContainer();
foreach (Cookie cookie in responseCookies)
{
cookieContainer.Add(cookie);
}
_hubConnection = new HubConnection(_baseUri.ToString()) { CookieContainer = cookieContainer };
Po tej konfiguracji, moi sesyjne ciasteczka są wysyłane do koncentratora na każdym wywołaniu. W pewnym momencie potrzebuję ServiceStack do przechwycenia tych żądań i ustawienia uwierzytelnionego użytkownika.
To działało w połączeniu z oryginalnie opublikowanym kodem, w którym zapisałem ciasteczka autoryzacyjne do kontenera Cookal SignalR. Dzięki! – Kevin