【问题标题】:OWIN Authentication and "online users"OWIN 身份验证和“在线用户”
【发布时间】:2017-03-06 05:02:09
【问题描述】:

我有一个使用集中式 ASP.NET MVC 网站的项目,该网站正在实施 OWIN ASP.NET Identity 架构。 我们的集中式网站已用于:

  • 使用用户名/密码授予令牌
  • 授予刷新令牌
  • 添加/删除和修改用户/角色和声明
  • 通过 OAuthentication 和社交登录(Twitter、Facebook ...)授予令牌

到目前为止一切顺利,但现在我收到了一个新请求。在我看来,该层应该能够“跟踪在线用户”,这是不可能的,因为 ASP.NET 身份 OAuth 正在授予令牌和刷新令牌,但它没有任何“会话”和“在线认证用户”的概念.

关于如何实现此功能的任何想法或建议?

【问题讨论】:

  • 对于需要功能的销售经理来说,“层”只是一个好听的名字吗?

标签: asp.net asp.net-mvc oauth asp.net-identity owin


【解决方案1】:

这在一定程度上取决于您对跟踪在线用户的确切定义,但假设它的定义较为宽松,您可以通过准确介绍您所说的尚未完成的内容来实现这一点;会议。

在身份验证方面,您的 ASP.NET MVC 应用程序充当身份提供者/授权服务器 (IP/AS),但这并不意味着它不能或不应该具有会话的概念。通常会话是 IP/AS 中的常见做法,因为这样它们可以为依赖它们的应用程序提供单点登录。

例如,Google 和 Facebook 都充当其他应用程序的 IP/AS,并且它们都维护会话。您可能会争辩说,在这两种情况下,它们不仅仅是充当 IP/AS,因此会话是必不可少的。

但是,仅关注身份验证和授权服务的提供商也依赖于会话。比如我之前提到的Auth0 uses sessions as a way to provide the single sign-on experience

通过引入会话,您应该能够从 IP/AS 的角度维护在线/经过身份验证的用户列表。最大的问题是,当您的业务用户说跟踪在线用户时,这是否真的是他们想要的。

 
披露:我是一名 Auth0 工程师。


 
更新

关于会话的实际实现,这取决于需求,但客户端 cookie 和服务器端持久存储的传统方法应该可以解决问题。它不需要与 ASP.NET Identity 集成,您只需要跟踪给定的用户身份(通过其用户唯一标识符)是否有活动会话;在他们进行身份验证时完成。

然后是决定会话何时结束的问题,这主要取决于确切的要求。它可以简单到用户也去 IP/AS 注销,或者如果您想从另一个应用程序中触发单点注销,则更棘手。

关于令牌,您还可以考虑在会话结束(注销)时撤销刷新令牌。总而言之,有很多活动部件和事情要实施。

如果您还没有这样做,您还应该检查:

【讨论】:

  • 我非常了解 Auth0,但不幸的是我不能使用它,因为它不在预算之内,我们有一个云产品,并且由于成本高昂,两年前已拒绝使用 Auth0。但是我找不到任何关于 ASP.NET 身份和令牌的会话管理
  • 是的,我在企业界工作了很多年,所以我知道那种感觉。管理人员很容易检查外部产品的定价,但他们从不完全计算实施、保护和维护内部解决方案的实际成本。关于您关于会话管理的观点,我更新了答案。
  • 安吉洛感谢您的更新。不幸的是,OAuth0 等外部工具的成本必须记在我们每个拥有数千名用户的云客户身上,这就是我们选择自行实施的原因
猜你喜欢
  • 1970-01-01
  • 2015-05-12
  • 2015-09-23
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 2015-07-18
  • 2018-06-04
相关资源
最近更新 更多