【问题标题】:How to re-authenticate when using ServiceStack server events without prompting for credentials again?使用 ServiceStack 服务器事件时如何重新进行身份验证而不再次提示输入凭据?
【发布时间】:2015-12-24 00:25:43
【问题描述】:

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

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

这给我带来了一个问题,当创建 ServerEventsClient 的新实例时,它不再被授权,此时我没有再次授权它的凭据,向客户端询问会很不方便再来一次。

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

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

谢谢!

【问题讨论】:

    标签: servicestack


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我会试试这个。我发现可行的一种方法是更改​​ ServerEventsClient 类的 Channels 和 EventStreamUri 属性以添加通道并调用 Restart()。你觉得这种方法有什么问题吗?谢谢!
    • @Ceottaki 是的,那也应该这样做。虽然我可能应该公开一个更具体的 API 来调用它。
    猜你喜欢
    • 2020-08-04
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2021-09-06
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多