我使用信号器,因为我想使用websockets,[Authorize]
属性仅在连接打开时授权客户端,然后一切正常。我想以某种方式触发[Authorize]
进程。
注意:必须使用websockets
例如(我使用Owin.Security.Cookies(UseCookieAuthentication)): 我在我的cookie中使用有效令牌连接到我的应用程序,一旦我完成了这项操作,我手动删除浏览器中的cookie,一切正常,直到我重新加载页面。另一个例子是,如果客户端已经有一个开放且有效的连接,但令牌限制到期 - 它在重新加载完成之前仍然有效。
现在我的问题 - 无论如何我是否可以强制信号器每隔x分钟重新授权一次令牌?
答案 0 :(得分:0)
对于本答复的其余部分,我将假设您使用的是SignalR集线器而不是PersistentConnections。
当您使用SignalR的[Authorize]
属性或您自己的自定义版本时,有三种方法需要注意。
AuthorizeHubMethodInvocation
当您调用集线器上的方法时,可以调用此方法。这可以是任何方法,也可以是仅应用[Authorize]
属性的方法。你可以把你的代码放在这里。
AuthorizeHubConnection
这可能是你想要的。每次客户端连接到集线器 - 这是一个相当频繁的事件 - 这个方法被调用。不要将此与SignalR的Hub关于连接的想法混淆。当客户端与SignalR集线器通信时,频繁调用此方法 - 平均每次调用一次或两次。
这是我将你所谈论的代码放在哪里。您需要创建一个继承自SignalR.AuthorizeAttribute
的新属性。在那里,您需要覆盖AuthorizeHubConnection
或AuthorizeHubMethodInvocation
。请注意,如果您不覆盖其中一种方法,他们会致电UserAuthorized
做出决定。
在这两种方法中的一种方法中,如果它们的cookie有效(它存在,具有有效的令牌且未过期),则希望它们返回true
,否则返回false
。每次都会调用此代码 - 或者几乎每次调用集线器,并在出现任何错误时拒绝访问客户端。
希望这有效!