强制信号器重新授权用户

时间:2016-05-19 09:27:20

标签: asp.net cookies signalr

我使用信号器,因为我想使用websockets,[Authorize]属性仅在连接打开时授权客户端,然后一切正常。我想以某种方式触发[Authorize]进程。

注意:必须使用websockets

例如(我使用Owin.Security.Cookies(UseCookieAuthentication)): 我在我的cookie中使用有效令牌连接到我的应用程序,一旦我完成了这项操作,我手动删除浏览器中的cookie,一切正常,直到我重新加载页面。另一个例子是,如果客户端已经有一个开放且有效的连接,但令牌限制到期 - 它在重新加载完成之前仍然有效。

现在我的问题 - 无论如何我是否可以强制信号器每隔x分钟重新授权一次令牌?

1 个答案:

答案 0 :(得分:0)

对于本答复的其余部分,我将假设您使用的是SignalR集线器而不是PersistentConnections。

当您使用SignalR的[Authorize]属性或您自己的自定义版本时,有三种方法需要注意。

AuthorizeHubMethodInvocation

当您调用集线器上的方法时,可以调用此方法。这可以是任何方法,也可以是仅应用[Authorize]属性的方法。你可以把你的代码放在这里。

AuthorizeHubConnection

这可能是你想要的。每次客户端连接到集线器 - 这是一个相当频繁的事件 - 这个方法被调用。不要将此与SignalR的Hub关于连接的想法混淆。当客户端与SignalR集线器通信时,频繁调用此方法 - 平均每次调用一次或两次。

这是我将你所谈论的代码放在哪里。您需要创建一个继承自SignalR.AuthorizeAttribute的新属性。在那里,您需要覆盖AuthorizeHubConnectionAuthorizeHubMethodInvocation。请注意,如果您不覆盖其中一种方法,他们会致电UserAuthorized做出决定。

在这两种方法中的一种方法中,如果它们的cookie有效(它存在,具有有效的令牌且未过期),则希望它们返回true,否则返回false。每次都会调用此代码 - 或者几乎每次调用集线器,并在出现任何错误时拒绝访问客户端。

希望这有效!