gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:39:13 26 4
gpt4 key购买 nike

我正在构建一个带有sails.js 后端的 Angular 应用程序。我已将此 JWT 身份验证合并到应用程序中。
https://github.com/Foxandxss/sails-angular-jwt-example

我仍在探索身份验证的工作原理,目前正在尝试弄清楚如何添加多个授权级别。
它预先构建了 0 和 1,我想在此之上添加一个管理员级别。

它处理现有的授权级别如下:
每个路由都通过一个常量分配一个授权级别。因此,所有用户路由都在 state 的 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 是否有 token 。如果有 token ,则路由继续,否则引导您。

这是在 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持有服务器授予的授权。私有(private)声明让您可以在 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”的附加策略,但验证 auth提供的 JWT 上的声明与调用将要调用的任何函数所需的授权相匹配。

关于angularjs - Angular 中的 JWT 身份验证 - 多个身份验证级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29677744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com