【问题标题】:Asp.net MVC core prevent multiple device access on certain pagesAsp.net MVC 核心防止某些页面上的多个设备访问
【发布时间】:2020-05-17 22:08:41
【问题描述】:

我的整个系统允许一个用户同时从多个设备访问。但是,某些特定页面不允许这样做。当用户从设备1访问该页面时,稍后他从设备2访问,第二个设备需要正常访问。但是,第一个设备应该被重定向到另一个页面(用户仍然在两个设备上登录)。

我正在使用 ASP.net 核心身份来管理身份。

阅读后,我认为我可以在这种情况下使用 SignalR。每当用户从设备 2 访问时,他都会向服务器发送一条消息。服务器将向设备 1 推送消息,设备 1 将重定向。但是,它看起来不太好,因为重定向是从客户端(设备 1)进行的。这意味着设备 1 可以通过篡改客户端代码轻松拒绝重定向。

解决我的问题的正确方法是什么?

【问题讨论】:

    标签: asp.net-core asp.net-identity signalr.client asp.net-core-signalr


    【解决方案1】:

    当用户从设备 1 访问页面时,稍后他从设备 2 访问,第二个设备需要正常访问。但是,第一个设备应该被重定向到另一个页面(用户仍然在两个设备上登录)。

    如您所述,为实现上述要求,将 SignalR 功能集成到 Web 应用程序是一种可能的解决方案。

    您可以保留UserName - UserConnectionId(s) - PageName的信息,然后可以调用hub方法检查保留的映射数据中的连接ID(和当前页面名称)是否与现有的连接ID(和页面名称)不同,并将消息推送到特定客户端基于连接 Id 触发客户端重定向。

    看起来不太好,因为重定向是从客户端(设备 1)进行的。

    是的,客户端用户可以禁用 signalR javascript 客户端功能以防止重定向。作为一种解决方法,可以在服务器端仔细检查。

    例如,您可以将上述映射数据UserName - UserConnectionId(s) - PageName 存储在某个永久存储中,然后您可以在控制器操作(或处理程序方法)代码逻辑中检查它,如果当前用户手动禁用了javascript客户端功能并且没有当前的映射数据用户添加到该存储中,您可以将用户重定向到显示“此应用需要 signalR javascript 客户端功能,请不要禁用它”等内容的特定页面,而不是显示用户期望的页面。

    【讨论】:

    • 关于服务器端的双重检查,我想我这里没有处理程序方法。在设备 2 访问时,设备 1 不执行任何调用服务器的操作。甚至在设备 2 连接之前就应该调用来自设备 1 的控制器操作,并且它在那时有效。设备 1 上的客户端可以先加载页面,然后禁用 signalR javascript。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2012-01-19
    相关资源
    最近更新 更多