使用ServiceStack ServerEventsClient进行现有身份验证

时间:2015-10-23 15:43:20

标签: c# authentication events servicestack push

我正在寻找一种方法来使用ServiceStack ServerEventsClient的现有会话ID。我想使用服务器事件,但访问权限仅限于经过身份验证的用户。

对于JsonServiceClient,我在所有项目引用的库中都有一个方法,它返回一个可以使用的经过身份验证的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实现类似于上述方法的东西?我试图避免发送身份验证请求,因为我已经有了一种简单的方法来获取客户端上的会话信息。

1 个答案:

答案 0 :(得分:2)

用于维护每个ServerEvents请求的CookieContainer的ServerEventsClient.ServiceClient仅为JsonServiceClient,因此您可以通过以下方式访问其具体类型:

var client = (JsonServiceClient)serverEventsClient.ServiceClient;

因此,您可以采用相同的方法在任何服务客户端之间传输cookie。

ServerEventsClient.Authenticate只是在同一个ServerEventsClient.ServiceClient实例上发出Authenticate请求,因此它会使用成功响应中返回的cookie进行填充。