我正在构建一个带有sails.js后端的角度应用程序.我已将此JWT身份验证合并到应用程序中.
https://github.com/Foxandxss/sails-angular-jwt-example
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是否有令牌.如果有令牌,则路由继续,否则它会引导您.
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 举报,一经查实,本站将立刻删除。