使用 ServiceStack ServerEventsClient 的现有身份验证
Existing authentication with ServiceStack ServerEventsClient
我正在寻找一种将现有会话 ID 用于 ServiceStack ServerEventsClient 的方法。我想使用服务器事件,但需要将访问权限限制为经过身份验证的用户。
对于 JsonServiceClient,我在我们所有项目引用的库中有一个方法,returns 一个经过身份验证的 JsonServiceClient 可以使用。目的是通过将所有身份验证信息保存在一个地方来加快开发速度:
public static JsonServiceClient GetAuthenticatedServiceClient()
{
var ServiceClient = new JsonServiceClient(globals.ApiUrl)
{
RequestFilter = request => request.UserAgent = globals.ClientSoftware.ToString()
};
var CookieQuery = (from c in globals.AuthCookieContainer
where c.Name == "ss-id"
where c.Expires > DateTime.Now
select c);
if (CookieQuery.Count() > 0)
{
ServiceClient.CookieContainer.Add(CookieQuery.FirstOrDefault());
}
else
{
throw new Exceptions.ApiNotAuthenticatedException();
}
return ServiceClient;
}
我的问题是:有没有办法为ServerEventsClient实现类似于上述方法的东西?我试图避免发送身份验证请求,因为我已经有了一种获取客户端会话信息的简单方法。
用于为每个 ServerEvents 请求维护 CookieContainer 的 ServerEventsClient.ServiceClient 只是一个 JsonServiceClient
,因此您可以通过以下方式访问其具体类型:
var client = (JsonServiceClient)serverEventsClient.ServiceClient;
因此您可以采用相同的方法在任何服务客户端之间传输 cookie。
ServerEventsClient.Authenticate 实际上只是在同一 ServerEventsClient.ServiceClient 实例上发出 Authenticate
请求,因此它会填充成功响应返回的 cookie。
我正在寻找一种将现有会话 ID 用于 ServiceStack ServerEventsClient 的方法。我想使用服务器事件,但需要将访问权限限制为经过身份验证的用户。
对于 JsonServiceClient,我在我们所有项目引用的库中有一个方法,returns 一个经过身份验证的 JsonServiceClient 可以使用。目的是通过将所有身份验证信息保存在一个地方来加快开发速度:
public static JsonServiceClient GetAuthenticatedServiceClient()
{
var ServiceClient = new JsonServiceClient(globals.ApiUrl)
{
RequestFilter = request => request.UserAgent = globals.ClientSoftware.ToString()
};
var CookieQuery = (from c in globals.AuthCookieContainer
where c.Name == "ss-id"
where c.Expires > DateTime.Now
select c);
if (CookieQuery.Count() > 0)
{
ServiceClient.CookieContainer.Add(CookieQuery.FirstOrDefault());
}
else
{
throw new Exceptions.ApiNotAuthenticatedException();
}
return ServiceClient;
}
我的问题是:有没有办法为ServerEventsClient实现类似于上述方法的东西?我试图避免发送身份验证请求,因为我已经有了一种获取客户端会话信息的简单方法。
用于为每个 ServerEvents 请求维护 CookieContainer 的 ServerEventsClient.ServiceClient 只是一个 JsonServiceClient
,因此您可以通过以下方式访问其具体类型:
var client = (JsonServiceClient)serverEventsClient.ServiceClient;
因此您可以采用相同的方法在任何服务客户端之间传输 cookie。
ServerEventsClient.Authenticate 实际上只是在同一 ServerEventsClient.ServiceClient 实例上发出 Authenticate
请求,因此它会填充成功响应返回的 cookie。