使用SignalR,OWIN和Web API杀死“会话”

时间:2016-04-20 16:32:04

标签: asp.net-web-api signalr owin

这是一条漫长的道路,但我使用SignalR处理我的Web API,它使用OWIN进行令牌身份验证。

我有一种机制,如果用户在终端#1上进行身份验证,然后在终端#2上进行身份验证,我可以向他们发送一个Javascript警报,说“嘿,一次只能有一个会话。你要记录哪一个吗?“

我的问题是如何在其中一个终端上杀死他们的“会话”?我说“会话”,但由于这是一个基于REST的API,所以确实没有会话。如果我可以强制他们在终端上重新进行身份验证,他们选择“退出”就足够了。

我有每个客户的SignalR connectionId。有没有办法让他的身份验证令牌失效并强行注销?

注意 - 客户端与Web API分开,因为它们托管在两个不同的服务器上。客户端只是HTML / Javascript调用Web API。

1 个答案:

答案 0 :(得分:1)

如果您使用的是承载令牌方法,并且您没有将令牌(或令牌哈希)存储到某种持久存储(例如数据库)中,那么您无法使无效令牌。

OAuth is not an Authentication protocol以来,它没有任何注销概念。您唯一的选择是从客户端存储中删除令牌(我可以想象它存储在localStorage或cookie中)。

当然,这并没有真正使任何事情无效,如果由于某种原因没有删除令牌,它仍然可以用于授权目的。

如果您确实需要一次有效的单一访问令牌,那么您唯一的选择是将有关它的一些信息存储在数据库中,并在每次验证令牌时检查该存储。例如,您可以使用用户名存储令牌的哈希值(永远不会存储this reason的真实令牌,它们具有相同的密码值),但请注意,此方法会使您的授权协议< em>比以前少一点无状态。