gpt4 book ai didi

authentication - 使用 ServiceStack 身份验证插件对 SignalR 集线器进行身份验证

转载 作者:行者123 更新时间:2023-12-04 08:26:24 25 4
gpt4 key购买 nike

我在 Asp.Net 之上创建了一个 ServiceStack 服务,它实现了基本身份验证。在服务路线上一切正常。我能够登录并获得在后续调用中验证的 session cookie。我正在使用 HttpClient 来处理这些请求。

我还有一个在同一个 Asp.Net 服务上运行的 SignalR 集线器,但我的集线器方法未对 Principal 进行身份验证。

基本上我需要的是 ServiceStack 拦截对我的集线器的调用并验证 session cookie 并填充 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 };

完成此设置后,我的 session cookie 会在每次调用时发送到集线器。不知何故,我需要 ServiceStack 拦截这些请求并设置经过身份验证的用户。

最佳答案

让 ServiceStack 进行身份验证并保留用户 session 。然后在需要身份验证的 SignalR 集线器端点中放置以下代码:

var cache = AppHostBase.Resolve<ICacheClient>();
var sess = cache.SessionAs<AuthUserSession>();
if (!sess.IsAuthenticated)
throw new AuthenticationException();

关于authentication - 使用 ServiceStack 身份验证插件对 SignalR 集线器进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com