我有一个使用集中式ASP的项目。asp.net MVC网站,实现了OWIN ASP。. NET身份体系结构。我们的集中式网站已用于:
- 使用用户名/密码授予令牌
- 授予刷新令牌
- 添加/删除和修改用户/角色和声明
- 通过OAuthentication和Social Login (Twitter, Facebook…)授予令牌
到目前为止还好,但现在我有一个新的请求。该层应该能够"跟踪在线用户",这是不可能的,在我看来,因为ASP。. NET Identity OAuth授予令牌和刷新令牌,但它没有任何"会话"one_answers"在线认证用户"的概念。
关于如何实现这个功能有什么想法或建议吗?
这在一定程度上取决于你对跟踪在线用户的确切定义,但假设一个宽松的定义,你可以通过引入你说你还没有的东西来实现这一点;会话。
在身份验证方面,您的ASP。. NET MVC应用程序充当身份提供者/授权服务器(IP/as),但这并不意味着它不能或不应该有会话的概念。一般来说,会话在IP/AS中是常见的做法,因为这样它们可以为依赖于它们的应用程序提供单点登录。
例如,Google和Facebook都充当其他应用程序的IP/as,并且它们都维护会话。你可能会争辩说,在这两种情况下,它们所做的不仅仅是充当IP/as,所以会话是必须的。
然而,只关注认证和授权服务的提供者也依赖于会话。例如,Auth0使用会话作为提供我前面提到的单点登录体验的一种方式。
通过引入会话,您应该能够从IP/AS的角度维护在线/经过身份验证的用户列表。最大的问题是,当您的业务用户说跟踪在线用户时,这是否确实是他们想要的。
,
披露:我是一个Auth0工程师。
,
:
关于会话的实际实现,这取决于需求,但是客户端cookie和服务器端持久存储的传统方法应该可以解决问题。它不需要与ASP集成。. NET身份,你只需要跟踪一个给定的用户身份(通过它的用户唯一标识符)有一个活动会话;当他们验证时完成。
然后是决定会话何时结束的问题,这部分将主要取决于确切的需求。它可以简单到用户也到IP/as注销,或者更棘手的是,如果您想从另一个应用程序中触发单点注销。
关于令牌,您还可以考虑在会话结束(注销)时撤销刷新令牌。总之,有很多移动的部分和东西需要实现。
如果你还没有这样做,你也应该检查:
- OpenID Connect Core
- OpenID连接会话管理