加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Angular中的JWT身份验证 – 多个身份验证级别

发布时间:2020-12-17 10:22:49 所属栏目:安全 来源:网络整理
导读:我正在构建一个带有sails.js后端的角度应用程序.我已将此JWT身份验证合并到应用程序中. https://github.com/Foxandxss/sails-angular-jwt-example 我仍然在探究身份验证的确切工作方式,我目前正在尝试弄清楚如何添加多个授权级别. 它预先构建为0和1,我想在其
我正在构建一个带有sails.js后端的角度应用程序.我已将此JWT身份验证合并到应用程序中.
https://github.com/Foxandxss/sails-angular-jwt-example

我仍然在探究身份验证的确切工作方式,我目前正在尝试弄清楚如何添加多个授权级别.
它预先构建为0和1,我想在其上面添加一个管理级别.

它处理现有的授权级别,如下所示:
通过常量为每条路线分配授权级别.因此,所有用户路由都获得在状态中的data属性分配的此访问属性:

$stateProvider
          .state('user',{
            abstract: true,template: '<ui-view/>',data: {
              access: AccessLevels.user
            }
          })

AccessLevels.user是从常量键值对中提取的:

angular.module('app')
  .constant('AccessLevels',{
      anon: 0,user: 1
  });

每当路由导航到时,它都会检查data.access属性以查看该特定路由的访问级别.如果它作为需要身份验证的路由返回,它会检查localStorage是否有令牌.如果有令牌,则路由继续,否则它会引导您.

这是在stateChangeStart上调用的函数:

authorize: function(access) { //<- 'access' will be whatever is in the data property for that state
        if (access === AccessLevels.user) {
          return this.isAuthenticated(); // <- this just grabs the token
        } else {
          return true;
        }
      }

那么添加附加层的最简单方法是什么?
我显然需要将auth_level值放入用户模型中.但那又怎样?添加此功能和维护现有身份验证的完整性的最佳方法是什么(我担心安全性)?

您可以使用 private claims来保存服务器授予的授权.私人声明允许您在JWT中放置您想要的任何其他类型的数据.

我从未使用过node-jsonwebtoken(这似乎是sails.js用于JWT的东西),但看起来你可以直接使用JWT有效负载来访问你期望存在的值,所以你可以做类似的事情.这个:

// Assign authorization on server after successful authentication of an admin
token.auth = AccessLevels.admin;

// Read authorization on client
authorize: function(access) {
    if (access === AccessLevels.anon) {
        return true;
    }
    // Assumes the JWT token is returned by isAuthenticated()
    // (Sorry,not familiar with Sails.js or the JWT example)
    return this.isAuthenticated().auth === access;
}

在身份验证之后,任何后续请求都应该验证用户的授权,可能是通过在您提供的示例中添加类似于“tokenAuth”的添加策略,但是验证提供的JWT上的auth声明与调用任何函数所需的授权相匹配即将被召唤.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读