使用JWT或OAuthv2保护REST + AngularJS

时间:2017-12-29 19:53:32

标签: angularjs rest security oauth-2.0 jwt

我是REST安全的新手,我正在尝试构建一个AngularJS(Angular 1)应用程序,该应用程序将RESTful Web服务作为其后端进行集成。此Web服务将是应用程序(前端)获取和写入所有数据的方式。

该应用程序最初将是REST服务的唯一客户端,但最终我想将该服务作为公开的公共API打开,而不仅仅是我的Angular应用程序使用/使用。

我正在试图弄清楚如何为我的REST服务构建身份验证/授权解决方案,并且有一些我不清楚的事情。我希望Angular应用程序及其支持REST服务都拥有自己的身份验证/授权模型(我认为 - 我可以谈论这个)。

  • Angular应用程序是否附带自己的“服务用户”和用于与REST服务集成的凭据?像myapp-client的用户名和自己的密码?
  • Angular应用程序是否将用户的凭据“转发”到REST服务上?

在第一种情况下,就像我说的那样,Angular应用程序可能会附带硬编码的凭据,用于集成并连接到REST服务(再次作为示例:用户名:myapp-client,密码:12345)。我认为这是最简单的,但随后(非常可能)在浏览器/前端代码中公开这些硬编码凭据,然后在sun下的任何脚本小子都有用户名+密码来访问我的整个REST API。

在后一种情况下,我认为Angular应用程序必须充当用户的某种中间人:

  1. 是匿名的,并被路由到登录屏幕
  2. 输入自己的凭据(用户名:smeeb,密码:23456)
  3. 验证(以某种方式 与应用以及后端)
  4. 获得某种持有者/ JWT /等。令牌以及随后对Angular应用程序的所有后续HTTP请求都使用此有效令牌(但同样,应用程序只是在行动 - 以某种方式 - 作为存储令牌的浏览器与REST服务之间的中间人)
  5. 我想我正在寻找确认我怀疑前一个解决方案(应用程序用来与后端集成的1个服务用户)在浏览器中公开凭据以及后一种解决方案是可行的方法。还要确认JWT是否是实现后一种解决方案的一种方式,或者我是否需要使用OAuthv2或其他方法。

1 个答案:

答案 0 :(得分:1)

当您需要通过REST API验证Angular应用程序时,步骤如下。

  1. 用户输入Angular应用程序的用户名/密码
  2. Angular App将这些数据发送到REST API
  3. 如果凭据正确,REST API会将JWT返回给Angular应用程序。
  4. 对于需要身份验证的REST API的每个后续请求,Angular app会根据请求传递JWT。