【问题标题】:REST API and authentication or not?REST API 和身份验证与否?
【发布时间】:2018-07-04 12:39:34
【问题描述】:

我正在询问有关从头开始开发应用程序的问题,但遇到了一些麻烦: 我将有一个前端部分(Angular)和一个后端,它们将通过后端的 REST API 进行经典通信。 而对于上下文:这个应用程序(前+后)将部署在每个要使用应用程序的设备上,因此没有公共的全局服务器API。

问题是:在这种情况下,我是否需要对发往后端的请求进行身份验证? 还是我必须考虑作为本地网络服务不需要身份验证?如果我必须知道 Rest 应用程序必须是无状态的,我是否应该使用 OAuth(带有一点状态部分)+ JWT 不包括 HTTP 会话身份验证?

非常感谢,有些概念我不明白。

编辑:在全球范围内,问题是何时开发简单的 REST 应用程序以及何时开发安全认证部分?

【问题讨论】:

  • 我认为,如果有要保护的数据或个人数据,则需要进行身份验证。 +它允许记录并知道谁在请求。你不能只说“没有人会知道它的存在”。如果您必须保护它,请进行身份验证,否则假设它是公共的(攻击者可能在您的内部网络中而您不会注意到)我认为 JWT 基本上就足够了,OAUTH 2.0 的设置很复杂,jwt 很简单,完全无状态并且是安全的
  • 有什么区别,在实践中我注意到 OAuth2(至少对于特定授权)正在使用令牌?
  • 如果我没记错的话,用途是非常不同的。 Oauth 的正常工作流程:在您的用户第一次连接时:您在第三方服务请求授权,第三方服务给您一个“授权授予”(这是您为您的用户存储的),然后您可以请求一个令牌(本质上,令牌具有有限的持续时间)。这对于应该由未知服务使用的第三方服务非常有趣(Facebook 不知道您是谁,但它知道您可以做什么)
  • 所以它允许第三方服务在不知道你是谁的情况下知道用户允许你访问的内容(存储在“授权授予”中,持续时间不受限制,您可以阅读)。 JWT 只是一种令牌策略,它允许您与签名(或加密)令牌进行通信:假设您有一个用户后端和一个订单后端:用户在用户的后端进行身份验证,用户后端发送给您返回一个 JWT,然后订单后端可以假设您是存储在 JWT 中的用户,然后它允许您知道存储在 JWT 中的用户的订单
  • 恢复:OAUTH系统生成的token是给第三方的。如果您只想对您的服务进行身份验证,那么 JWT 就足够了(JWT 很适合在受信任的服务之间使用)

标签: angular rest oauth-2.0 spring-security-oauth2 restful-authentication


【解决方案1】:

通常,前端绝对应该进行身份验证才能执行 REST 服务。通常使用 OAuth 之类的东西,这样客户端每个人都可以获得一个唯一的令牌来进行身份验证。

如果您说服务器和客户端都部署在隔离设备上,我的第一个问题是您为什么要使用该架构? 可能在这种情况下避免身份验证是可以的,但您确实需要首先阐明客户端-服务器分离背后的逻辑,并考虑可能的攻击。

【讨论】:

  • 好的,谢谢,隔离设备将是客户端计算机。而且我认为角度应用程序和后端处理部分之间进行通信的经典方式是通过 REST ?
  • 最后它不是客户端-服务器应用程序,而是通过 REST 进行的前端-后端通信,因为我不知道没有 REST 怎么办
  • 好的 - 如果您只是将网络应用程序用作本机应用程序的替代品,并且服务器也在本地设备上运行,那么听起来您不需要身份验证。如果服务器在其他地方运行,则肯定需要对任何特权 REST 请求进行身份验证。
  • 好的,但同一设备上的其他软件可以请求 API 吗?即使这将是设备所有者精度的责任:这不是一个完全隔离的设备,后端应该请求外部 DB/API 例如(但不是我的)但是是的,服务器将在每个本地设备上运行
  • 否则平时应该如何前后沟通?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2013-03-06
  • 2017-12-15
  • 2019-03-31
  • 2018-07-26
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多