【问题标题】:Securely Allow Users to Grant Tech Support Access to Their Account安全地允许用户授予技术支持对其帐户的访问权限
【发布时间】:2013-06-06 18:13:06
【问题描述】:

我想让使用 bcrypted 密码和基于会话的身份验证的 Web 应用程序的用户能够在一段时间内授予我们的技术支持团队对其帐户的访问权限,并可以选择手动撤销访问权限。是否有解决此问题的安全方法?

我正在使用 LAMP 堆栈。

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

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

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

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

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

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

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

【问题讨论】:

    标签: php session security lamp


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢,安德烈 D!我想知道 OAuth 是否有用,但我不知道合适的术语。我会阅读的。出于好奇……OAuth 1 和 OAuth 2 都支持委托授权吗?
    • @DavidAlanHjelle,OAuth 2 与其前身非常不同,但它们或多或少都完成了相同的事情。 stackoverflow.com/questions/4113934/…
    • 顺便说一句...我可能会接受您的回答,但我想先更详细地查看 OAuth,所以可能是下周的某个时间。再次感谢!
    猜你喜欢
    • 2014-06-01
    • 2014-07-04
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2011-06-24
    • 2014-04-07
    相关资源
    最近更新 更多