【问题标题】:Securing REST + AngularJS with JWT or OAuthv2使用 JWT 或 OAuthv2 保护 REST + AngularJS
【发布时间】:2017-12-30 10:29:42
【问题描述】:

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

该应用最初将是 REST 服务的唯一客户端,但最终我希望将该服务作为公开的公共 API 开放,而不仅仅是由我的 Angular 应用使用/消费。

我正在尝试弄清楚如何为我的 REST 服务构建身份验证/授权解决方案,但有些事情我不清楚。我希望 Angular 应用程序及其支持的 REST 服务都拥有自己的身份验证/授权模型(我认为——我可以说出来)。

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

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

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

  1. 匿名并被路由到登录屏幕
  2. 输入自己的凭据(用户名:smeeb,密码:23456)
  3. 通过应用程序和后端进行身份验证(不知何故两者
  4. 获取某种承载/JWT/等。令牌,然后对 Angular 应用程序的所有后续 HTTP 请求都使用此有效令牌(但应用程序只是以某种方式充当存储令牌的浏览器和 REST 服务之间的中间人)

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

【问题讨论】:

    标签: angularjs rest security oauth-2.0 jwt


    【解决方案1】:

    当您需要通过 REST API 对 Angular 应用进行身份验证时,步骤如下。

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

    【讨论】:

    • 谢谢@Ishan (+1) - 当用户退出应用程序时,Angular 应用程序是否应该在 REST API 上点击“注销端点”,或者让 JWT 过期就足够了在服务器端?
    • 这个问题已经在stackoverflow.com/a/23089839/1281089 得到了回答。根据它,您可以简单地从客户端删除令牌,创建令牌黑名单,或者只需缩短令牌到期时间并经常轮换它们
    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 2015-06-16
    • 2017-11-17
    • 2013-02-15
    • 2021-04-02
    • 2021-03-20
    • 2013-08-04
    • 2017-08-29
    相关资源
    最近更新 更多