微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在构建一个带有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声明与调用任何函数所需的授权相匹配即将被召唤.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐