防止同一帐户多次登录(桌面应用程序)

Posted

技术标签:

【中文标题】防止同一帐户多次登录(桌面应用程序)【英文标题】:Prevent multiple login of same account (Desktop app) 【发布时间】:2022-01-23 23:39:04 【问题描述】:

我有一个使用 python 和 pyqt5 开发的桌面应用程序。 由于某些原因,我想实现一个登录系统。

场景会是这样的(本节到此为止):

    客户在我的网站上创建了一个帐户并下载了我的桌面应用程序。 他们第一次运行应用程序 => 显示的登录窗口要求用户输入他们的数据。 应用程序使用 JSON 对象 username, plaim_pw(使用 Flask 开发的 API)向 URL:http://ip/api/login 发出请求。 API 将处理该请求并检查该请求中该用户的数据是否存在,如果该 PW 正确,则它将返回响应。 如果用户成功登录,那么应用程序在每次运行时都不会再次询问用户他/她的数据,这些数据将存储在他们计算机的某个位置。

我想要的是:

如果用户 'A' 成功使用帐户 'X' 登录,同时用户 'B' 尝试登录使用用户 'A' 使用的同一帐户 => 然后我想告诉用户 'B'“无法在时间,因为另一个用户使用相同的帐户" 或类似的东西。 简短说明:同一帐户只能由一位用户同时使用。

我的问题是:

    如何实现该机制?是好是坏? 我了解了 JWT,它对我的​​情况有帮助吗?如果是,那我应该如何实现呢?

这里是额外的信息:

我没有很多 API,我现在只有“登录”的路由,而且出于某种原因我想要登录系统。 在未来,我将使用 HTTPS 而不是 HTTP

【问题讨论】:

【参考方案1】:

用户登录后,将其记录在服务器上。然后随后的登录尝试可以检查这一点。检查时考虑到期时间戳。这可以很容易地解决第一个问题。考虑查看会话管理等主题:https://en.wikipedia.org/wiki/Session_(computer_science)、https://en.wikipedia.org/wiki/Session_ID。

您的场景还不需要 JWT。

【讨论】:

感谢您的回答,您能告诉我为什么不需要 JWT 吗?如果我添加一些 API(其他路线)怎么办? 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 JWT 令牌用于在各方之间安全地传输信息,并包含有关实体的所有必需信息,以避免多次查询数据库。 JWT 的接收者也不需要调用服务器来验证令牌。根据描述,您没有发送用户可以做什么的声明,只是限制了并行会话,因此您不需要它。更多细节在这里auth0.com/docs/security/tokens/json-web-tokens。如果您添加更多端点 (API),您将从会话中获取登录用户。

以上是关于防止同一帐户多次登录(桌面应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

防止多次登录

在 Play 框架中防止多次登录网站

防止使用相同的登录凭据进行多次登录

Firebase:防止在多个设备上使用相同的帐户

当用户使用其他帐户登录时,如何防止激活应用内订阅?

防止多次点击同一个 UIButton