我有一个项目使用集中的ASP.NET MVC网站,该网站正在实现OWIN ASP.NET身份体系结构 . 我们的集中网站已被用于:
-
使用用户名/密码授予令牌
-
grant刷新令牌
-
添加/删除和修改用户/角色和声明
-
通过OAuthentication和社交登录(Twitter,Facebook ...)授予令牌
到目前为止很好,但现在我得到了一个新的要求 . 在我看来,该层应该能够“跟踪在线用户”这是不可能的,因为ASP.NET身份OAuth授予令牌和刷新令牌,但它没有“会话”和“在线认证用户”的任何概念 .
关于如何实现此功能的任何想法或建议?
1 回答
这取决于您对跟踪在线用户的确切定义,但假设对其有一个宽松的定义,您可以通过准确介绍您所说的还没有的内容来实现这一目标;会话 .
在身份验证方面,您的ASP.NET MVC应用程序充当身份提供者/授权服务器(IP / AS),但这并不意味着它不能或不应该具有会话的概念 . 通常,会话是IP / AS中的常见做法,因为这样它们可以为依赖它们的应用程序提供单点登录 .
例如,Google和Facebook都充当其他应用程序的IP / AS,并且它们都维护会话 . 你可以说,在这两种情况下,他们所做的远不止仅仅是作为IP / AS,所以 Session 是必须的 .
但是,仅关注身份验证和授权服务的提供程序也依赖于会话 . 例如,我之前提到过Auth0 uses sessions as a way to provide the single sign-on experience .
By introducing sessions you should be able to maintain a list of online/authenticated users from the perspective of the IP/AS . 最大的问题是,如果确实是您的业务用户在跟踪在线用户时所需要的话 .
Disclosure :我是Auth0工程师 .
Update :
关于会话的实际实现,它取决于要求,但客户端cookie和服务器端持久存储的传统方法应该可行 . 它不需要与ASP.NET Identity集成,您只需要跟踪给定的用户身份(通过其用户唯一标识符)具有活动会话;在进行身份验证时完成 .
然后就是决定会话何时结束的问题,那就是主要依赖于确切要求的部分 . 它可以很简单,如果您想从另一个应用程序中触发单点注销,用户也会转到IP / AS注销或更棘手 .
关于令牌,您还可以考虑在会话结束时撤消刷新令牌(注销) . 总之,有很多可移动的部件和要实现的东西 .
如果您还没有这样做,您还应该检查:
OpenID Connect Core
OpenID Connect Session Management