使用 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。