【问题标题】:OAuth's tokens and sessions in RESTREST 中的 OAuth 令牌和会话
【发布时间】:2010-12-12 22:51:51
【问题描述】:

另一分钟,我阅读了一篇关于 OAuth 的文章。它特别描述了在一系列请求期间客户端和服务提供者之间交换的令牌。

文章还提到,OAuth 作为授权层在 RESTful API 中获得了极大的普及。据我了解,REST 应该保持完全无状态。

问题:这个重复的token交换不是鱼雷REST的“无状态”原则吗?恕我直言,令牌可以被视为一种会话 ID,不是吗?

【问题讨论】:

    标签: session rest oauth stateless


    【解决方案1】:

    OAuth 令牌是明确的会话标识符,OAuth 令牌协商协议中的请求之间的交互不是无状态的,因为请求必须按特定顺序执行,并且它们确实需要服务器上的每个客户端存储,因为您需要跟踪诸如它们何时发布之类的东西。所以是的,OAuth 确实违反了 RESTful 架构的严格原则。

    不幸的是,Real WorldTM 可以应对我们需要做的事情,例如允许应用程序代表个人进行身份验证而无需请求他们的密码,而 OAuth 做得相当好。如果没有这种状态,就不可能实现类似的安全认证方案。实际上,OAuth (1.0a) 要求的更改之一是向令牌协商协议添加 更多 状态以降低安全风险。

    那么,它破坏了 REST 的无状态原则吗?是的。这有关系吗?除非你住在象牙塔里:-)

    【讨论】:

    • 我喜欢真实世界 (TM)。感谢您的回答!
    • 一旦 OAuth 身份验证处理完毕,它实际上可以是无状态的——OAuth 令牌由客户端存储,并与 Authorization 标头中的每个 REST 请求一起发送。
    • @Jordan:OAuth 令牌保存在服务器上以避免重新认证,因此状态保存在客户端和服务器上。所以它是有状态的。格雷格总结得很好。
    • @johndodo,这就是 2-legged 和 3-legged oauth 之间的区别。 2-legged 在每个请求上都被重新评估,因此它可以是无状态的(从 API 的角度来看,客户端可能仍然存储凭据以供重用),其中 3-legged 涉及会话令牌的生成、持久性和查找,因此永远不可能完全无国籍。
    【解决方案2】:

    身份验证是在处理网络交互时必须以某种方式跟踪的状态。最终,如果您的应用程序是否安静,服务器必须能够跟踪每个用户的“身份验证状态”,不幸的是,这需要某种规避 HTTP 的底层无状态性质以及任何其他传输/技术(如 REST)之上它。

    因此,要开发任何类型的经过身份验证的应用程序,必须在某处插入状态原则,如果这恰好是 REST 之上的 OAuth,那就必须如此!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2011-06-14
      • 2015-04-25
      • 2012-01-18
      • 2011-02-18
      • 2016-01-19
      • 2015-10-24
      相关资源
      最近更新 更多