如何在不再提示输入凭据的情况下使用ServiceStack服务器事件时重新进行身份验证?

时间:2015-12-23 15:16:43

标签: servicestack

我正在开发一个概念验证应用程序,演示如何使用ServiceStack来使用服务器事件。在此应用程序中,所有操作都必须由经过身份验证的用户完成,并且我已基于CredentialsAuthProvider实现了自己的身份验证提供程序。

该应用程序还要求客户端随意加入和离开频道。由于服务器事件的工作方式,这意味着每次客户端加入新通道或离开现有通道时,都会创建一个新的ServerEventsClient实例。

这给我带来了一个问题,因为当创建ServerEventsClient的新实例时,它不再被授权,此时我没有凭据再次授权它,并且要求客户端不方便再一次。

此问题的适当解决方案是什么?如何在服务器事件客户端连接之间重新验证或保留会话信息?

或者,有没有办法让客户加入/离开频道而无需重新创建连接?

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要将ServiceStack的ss-id/ss-pid Session Cookies从旧的ServerEventClient ServiceClient传输到新客户端,您应该可以通过手动复制cookie(例如使用GetCookieValues()/SetCookie())或分配整个CookieContainer,例如:

var oldClient = (JsonServiceClient)sseOld.ServiceClient;    
((JsonServiceClient)sseNew.ServiceClient).CookieContainer = sseOld.CookieContainer;