0

我想允许具有 bcrypted 密码和基于会话的身份验证的 Web 应用程序的用户能够授予我们的技术支持团队一段时间访问他们的帐户的权限,并可以选择手动撤销访问权限。有没有一种安全的方法来解决这个问题?

我正在使用 LAMP 堆栈。

理想情况下,可以手动授予访问权限(例如当用户与我们通电话时)或自动授予访问权限(例如当用户通过我们的应用程序向我们发送电子邮件或在我们的支持论坛中发帖时)。

我可以想象的一种方法如下所示:

  • 用户单击应用程序中的按钮以允许技术支持访问他们的帐户。
  • 浏览器会向服务器发送一个请求,服务器会将用户的会话标识符、CSRF 令牌等存储在我们的支持数据库中。
  • 支持数据库将让支持技术人员找到他们正在与之交谈的客户,然后使用相同的会话标识符等登录到用户的帐户。
  • 手动撤销访问将从支持数据库中删除会话标识符。

但是,它必然将技术支持限制在会话长度上,这可能不够长——尤其是在电子邮件支持的情况下。

有没有更好或更标准的方法来解决这个问题?

编辑 1:我可以做一些事情,比如生成一个新令牌,允许技术人员通过后门登录,但如果可能的话,我更愿意避免使用后门。

我想另一种可能性是提供一个开放的后门,该后门只能通过 SSH 隧道访问服务器。仍然是一个后门,但至少在谁可以访问它方面非常有限。

4

1 回答 1

1

我想允许用户 [...] 在一段时间内授予对其帐户的访问权限,并可以选择手动撤销访问权限。

您正在描述委派授权OAuth协议正是为此而设计的,并且更加安全。

在 OAuth 2.0 术语中,最终用户是资源所有者,技术支持代表用来访问用户帐户的系统称为客户端。OAuth 为资源所有者提供了一种方法来授予客户端访问其资源服务器上的资源的权限。在授权过程之后,客户端会收到一个访问令牌

与客户端的访问令牌关联的访问权限有一个范围,它定义了客户端对资源所有者(最终用户)资源的访问授权程度。这比共享会话 ID 的解决方案更安全,因为 (1) 各方之间不共享秘密,(2) 客户端访问与用户会话无关,以及 (3) 客户端的访问范围可以受到限制,因此他只有部分访问权限。访问令牌可以随时撤销;可能是资源所有者或到期时间。

您应该阅读OAuth 2.0 规范以了解有关如何授予授权以及如何发布和使用访问令牌的技术细节。

于 2013-06-07T01:25:07.757 回答