REST 身份验证到底在哪里使用?
Posted
技术标签:
【中文标题】REST 身份验证到底在哪里使用?【英文标题】:Where exactly is REST authentication used? 【发布时间】:2013-10-08 01:51:18 【问题描述】:我已经阅读了几个小时,但未能找到清晰易懂的解释。
在浏览器和服务器之间(替换诸如 php 会话/浏览器 cookie 组合之类的东西)? 服务器和另一台服务器之间? 同一服务器上的节点/模块之间?假设我正在从头开始开发一个系统,而不是在服务器端使用一些单体 MVC,我想使用 twitter 的示例 - 制作“所有东西 REST” - 分布式独立模块系统通过相互通信休息。那么浏览器和服务器之间是否也可以使用 REST(身份验证)?
【问题讨论】:
我使用过的大多数其他 API 都使用 HTTP 请求的 Authorization 标头中的令牌执行身份验证。如果您使用 HTTP 进行 REST,那当然是这样。这可以在浏览器/服务器或服务器/服务器等之间使用。看看这里有没有类似的问题:***.com/questions/454355/… “REST 身份验证”是什么意思? REST 是一种架构风格,而不是一种协议。没有特定的“REST 身份验证”协议。 @JohnSaunders 我明白什么是 REST。我不明白身份验证在哪里以及如何与它一起使用。 它可以在任何你想使用的地方使用。没有“REST 身份验证”之类的东西。 【参考方案1】:为了进一步改善互联网规模要求的行为, 我们添加了分层系统约束(图 5-7)。如中所述 第 3.4.2 节,分层系统风格允许架构 通过约束组件行为由分层层组成 这样每个组件都无法“看到”超出直接层的 他们正在互动。通过限制对系统的了解 单层,我们限制了整个系统的复杂性,并且 促进底物独立性。层可用于封装 旧服务并保护新服务免受旧客户的侵害, 通过将不常用的功能移至 共享中介。中介也可以用来改进系统 通过启用跨多个服务的负载平衡来实现可扩展性 网络和处理器。
分层系统的主要缺点是它们增加了开销 和处理数据的延迟,减少用户感知 性能[32]。对于支持缓存的基于网络的系统 约束,这可以通过共享缓存的好处来抵消 中介。将共享缓存放置在 组织领域可以带来显着的绩效收益 [136]。这些层还允许对数据实施安全策略 跨越组织边界,这是防火墙的要求 [79]。
分层系统与统一界面约束的结合 引起类似于制服的建筑特性 管道和过滤器样式(第 3.2.2 节)。虽然 REST 交互是 双向,超媒体交互的大粒度数据流可以各自 像数据流网络一样处理,带有过滤器组件 有选择地应用于数据流,以转换 内容通过 [26]。在 REST 中,中间组件可以 主动转换消息的内容,因为消息是 自我描述性及其语义对中介可见。
你真的应该阅读菲尔丁论文的layered system 部分。
REST 身份验证具体在哪里使用?
它在 REST 客户端和 REST 服务之间使用(客户端向服务发送请求 - 包含 auth 标头)。 REST 客户端可以位于浏览器上、另一台服务器上、您的服务器上(例如负载均衡器)等...这取决于当前上下文什么是 REST 客户端以及什么是 REST 服务。通过 REST,您有一个层次结构,其中上层包含调用下一层服务的客户端,依此类推......这个结构的组件(客户端,服务)不知道该层的存在层次结构...
例如,代理可能会在未经授权的情况下将请求中继到下一层,因为授权将由其他组件完成。您可能会验证您的客户端并添加具有用户身份或权限的辅助身份验证标头,因此下面的层不必再次处理用户名和密码。有很多选择...
只是谈谈oauth。它用于授权第 3 方(不受信任的客户端)访问用户帐户。因此,在这种情况下,客户端在不同的服务器上运行,并发送用户注册的访问令牌(而不是用户名和密码)。此第 3 方客户端使用该用户权限的允许部分。许多用户可以使用不同的访问令牌注册相同的第 3 方客户端。
【讨论】:
【参考方案2】:REST 是一种架构风格,REST 与身份验证/授权无关。也就是说,有一些身份验证/授权机制为使用服务的 REST 风格提供 RESTFul API:OpenID 和 OAuth/OAuth2。它们旨在用于客户端和服务器之间,以及更多(您可以阅读更多关于它们的信息)。
你也可能有兴趣阅读'whats-the-difference-between-openid-and-oauth'
希望对您有所帮助!
【讨论】:
以上是关于REST 身份验证到底在哪里使用?的主要内容,如果未能解决你的问题,请参考以下文章
当 Laravel 用作客户端时,JWT 存储在哪里进行身份验证?
为啥我的 REST 服务 .NET 客户端会在没有身份验证标头的情况下发送每个请求,然后使用身份验证标头重试?