Ho creato un servizio ServiceStack su Asp.Net che implementa l'autenticazione di base. Tutto sta funzionando bene sui percorsi di servizio. Sono in grado di accedere e ricevo i cookie di sessione che vengono convalidati nelle chiamate successive. Sto usando un HttpClient per quelle richieste.Autentica Hub SignalR con plug-in di autenticazione ServiceStack
Ho anche un Hub SignalR che viene eseguito sullo stesso servizio Asp.Net, ma il preside non è autenticato sui miei metodi Hub.
Fondamentalmente ciò che mi serve è che ServiceStack intercetti le chiamate nel mio hub e convalidi il cookie di sessione e compili il Context.User.Identity e lo contrassegni come autenticato. Se riesco a ottenere il set up, un semplice attributo [Authorize] sul mio hub farà il resto.
Ecco un esempio del mio codice:
// 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 };
Dopo questa configurazione, i miei cookies di sessione vengono inviati al Hub ad ogni invocazione. In qualche modo ho bisogno che ServiceStack intercetti quelle richieste e imposti l'utente autenticato.
Che ha funzionato in combinazione con il codice pubblicato originariamente in cui ho salvato i cookie di autenticazione nel contenitore del cookie SignalR. Grazie! – Kevin