使用JWT或OAuthv2保护REST + AngularJS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JWT或OAuthv2保护REST + AngularJS相关的知识,希望对你有一定的参考价值。

我是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服务之间的中间人)

我想我正在寻找确认,我怀疑前一个解决方案(应用程序用来与后端集成的1个服务用户)在浏览器中公开凭据,而后一个解决方案是要走的路。还要查看JWT是否是实现后一种解决方案的方法,或者我是否需要使用OAuthv2或其他方法。

答案

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

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

以上是关于使用JWT或OAuthv2保护REST + AngularJS的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 和 JWT 保护 REST Api

在 JAVA ee 中使用 JWT 保护 REST 服务

JWT 数字签名如何保护?

从 Spring Boot Rest Controller 访问 JWT 令牌

使用 AWS Cognito 保护 REST API

使用 JWT 访问 Rest API 适用于 Postman 但不适用于 Axios