Tôi đã tạo dịch vụ ServiceStack trên Asp.Net thực hiện xác thực cơ bản. Mọi thứ đang hoạt động tốt trên các tuyến dịch vụ. Tôi có thể đăng nhập và tôi nhận được các cookie phiên được xác thực trên các cuộc gọi tiếp theo. Tôi đang sử dụng một HttpClient cho những yêu cầu đó.Xác thực Trung tâm SignalR bằng cách sử dụng Plugin xác thực ServiceStack
Tôi cũng có một Trung tâm SignalR chạy trên cùng dịch vụ Asp.Net, nhưng Hiệu trưởng không được xác thực trên các phương thức Hub của tôi.
Về cơ bản những gì tôi cần là dành cho ServiceStack để chặn cuộc gọi vào Trung tâm của tôi và xác thực cookie phiên và điền vào Context.User.Identity và đánh dấu nó là đã xác thực. Nếu tôi có thể thiết lập, một thuộc tính [Authorize] đơn giản trên hub của tôi sẽ thực hiện phần còn lại.
Dưới đây là một mẫu mã của tôi:
// 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 };
Sau khi thiết lập này, cookie phiên tôi được gửi đến Hub trên mỗi sự thỉnh nguyện. Bằng cách nào đó tôi cần cho ServiceStack để chặn các yêu cầu đó và đặt người dùng đã được xác thực.
Điều đó làm việc kết hợp với mã được đăng ban đầu, nơi tôi đã lưu cookie xác thực vào vùng chứa cookie SignalR. Cảm ơn! – Kevin