Javascript 使用JWT时如何使用权限/角色处理授权
在我的第一个nodejs应用程序中实现授权时,我遇到了一个问题,该应用程序使用expressjs、sequelize和jsonwebtoken进行身份验证。在内部,我想禁止/允许不同用户的路由,我不想使用另一个包,如oauth2或为我处理授权的东西 目前,我已经创建了一个jsonwebtoken,它的有效负载中包含权限角色:Javascript 使用JWT时如何使用权限/角色处理授权,javascript,node.js,authorization,express-jwt,Javascript,Node.js,Authorization,Express Jwt,在我的第一个nodejs应用程序中实现授权时,我遇到了一个问题,该应用程序使用expressjs、sequelize和jsonwebtoken进行身份验证。在内部,我想禁止/允许不同用户的路由,我不想使用另一个包,如oauth2或为我处理授权的东西 目前,我已经创建了一个jsonwebtoken,它的有效负载中包含权限角色: { "userid": 1, "name": "John Doe", "permissions" : ["user_get", "user
{
"userid": 1,
"name": "John Doe",
"permissions" : ["user_get", "user_post", "user_put"]
"iat": 1505142542,
"exp": 1505146142
}
否我想在“GET/user”这样的调用中检查是否允许经过身份验证的用户调用它
我的问题是:使用这种方法安全吗?或者我不应该在jwt中包含权限吗?另一种方法是询问数据库并检索权限,而不是检查有效负载
此外,如果服务器使用户无效,将检查令牌是否仍然有效。是的,JWT保存机密数据非常安全
对于其他设置,您可以在每次请求时续订jwt令牌,因此每当客户端向您发送jwt令牌时。每个请求都将使用jwt令牌验证用户。并且每个响应都会将客户端发送到新的jwt令牌,以供下一个请求使用。jwt是安全的、良好的。如果您了解OAuth2,您甚至可以实现其更简单的版本
"userid": 1,
"name": "John Doe"
在验证用户访问API的权限之后的任何地方,都不要将它们保存在JWT中。相反,使用JWT的签名,这种方式不需要在网络上保持用户详细信息的流动。:) 是的,它和webtokens一样安全。这真的不是个好建议。jwt是“安全的”,因为它保证它不会被操纵。但是,您可以轻松读取其有效负载的内容,因为它只是base64编码的。将敏感数据保存在令牌(如密码)中根本不是一个好主意。正如@jpgrassi所提到的,JWT不是存储机密数据的安全场所。保留非机密数据可能是安全的,因为这将保证数据的完整性。