我已经阅读了几个小时,但未能找到清晰易懂的解释。REST 身份验证到底在哪里使用?
- 在浏览器和服务器之间(替换 PHP 会话/浏览器 cookie 组合之类的东西)?
- 服务器和另一台服务器之间?
- 同一服务器上的节点/模块之间?
假设我正在从头开始开发一个系统,而不是在服务器端使用一些单体 MVC,我想使用 twitter 的示例 - 使“所有事物 REST” - 分布式独立模块系统通过 REST 相互通信。REST(身份验证)是否也可以在浏览器和服务器之间使用?
为了进一步改善互联网规模要求的行为,我们添加了分层系统约束(图 5-7)。如第 3.4.2 节所述,分层系统样式允许架构由分层层组成,方法是约束组件行为,使得每个组件不能“看到”超出它们与之交互的直接层。通过将系统知识限制在单层,我们限制了整个系统的复杂性并促进了基板的独立性。层可用于封装遗留服务并保护新服务免受遗留客户端的影响,通过将不常用的功能转移到共享中介来简化组件。
分层系统的主要缺点是它们增加了数据处理的开销和延迟,降低了用户感知的性能[32]。对于支持缓存约束的基于网络的系统,这可以通过中介共享缓存的好处来抵消。将共享缓存放置在组织域的边界可以带来显着的性能优势 [136]。这些层还允许对跨越组织边界的数据执行安全策略,这是防火墙的要求[79]。
分层系统和统一接口约束的组合产生了类似于统一管道和过滤器样式的架构特性(第 3.2.2 节)。尽管 REST 交互是双向的,但超媒体交互的大粒度数据流都可以像数据流网络一样进行处理,过滤器组件有选择地应用于数据流,以便在内容通过时对其进行转换 [26]。在 REST 中,中介组件可以主动转换消息的内容,因为消息是自描述的,并且它们的语义对中介是可见的。
你真的应该阅读菲尔丁论文的分层系统部分。
REST 身份验证到底在哪里使用?
它在 REST 客户端和 REST 服务之间使用(客户端向服务发送请求 - 包含 auth 标头)。REST 客户端可以位于浏览器上、另一台服务器上、您的服务器上(例如负载平衡器)等等……这取决于当前上下文什么是 REST 客户端以及什么是 REST 服务。通过 REST,您有一个层次结构,其中上层包含调用下一层服务的客户端,依此类推......这个结构的组件(客户端,服务)不知道该层的存在等级制度...
例如,代理可能会在未经授权的情况下将请求中继到下一层,因为授权将由其他组件完成。您可能会验证您的客户端并添加具有用户身份或权限的辅助身份验证标头,因此下面的层不必再次处理用户名和密码。有很多选择...
只是谈谈oauth。它用于授权第 3 方(不受信任的客户端)访问用户帐户。因此,在这种情况下,客户端在不同的服务器上运行,并发送用户注册的访问令牌(而不是用户名和密码)。此第 3 方客户端使用该用户权限的允许部分。许多用户可以使用不同的访问令牌注册相同的第 3 方客户端。
REST 是一种架构风格,REST 与身份验证/授权无关。也就是说,有一些身份验证/授权机制为使用服务的 REST 风格提供 RESTFul API:OpenID和OAuth/OAuth2。它们旨在用于客户端和服务器之间,以及更多(您可以阅读更多关于它们的信息)。
您也可能有兴趣阅读“openid-and-oauth 之间的区别是什么”
希望这有帮助!