기본 인증을 구현하는 Asp.Net에서 ServiceStack 서비스를 생성했습니다. 서비스 경로에서 모든 것이 잘 작동합니다. 로그인 할 수 있으며 이후의 호출에서 유효성이 확인되는 세션 쿠키를 얻을 수 있습니다. 나는 그 요청에 대해 HttpClient를 사용하고있다.ServiceStack 인증 플러그인을 사용하여 SignalR Hub 인증
같은 Asp.Net 서비스에서 실행되지만 주체가 내 허브 메서드에서 인증되지 않은 SignalR 허브가 있습니다.
기본적으로 ServiceStack은 내 허브에 대한 호출을 가로 채어 세션 쿠키의 유효성을 검사하고 Context.User.Identity를 채우고 인증 된 것으로 표시해야합니다. 이 설정을 얻을 수 있다면 허브에있는 간단한 [Authorize] 속성으로 나머지 작업을 수행 할 수 있습니다. 내 세션 쿠키는 각 호출에 허브로 전송이 설정 한 후
// 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 };
: 여기
내 코드의 샘플입니다. 어떻게 든 ServiceStack이 요청을 가로 채고 인증 된 사용자를 설정해야합니다.
이는 인증 쿠키를 SignalR 쿠키 컨테이너에 저장 한 원래 게시 된 코드와 함께 작동했습니다. 감사! – Kevin