Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JWT时如何使用权限/角色处理授权_Javascript_Node.js_Authorization_Express Jwt - Fatal编程技术网

Javascript 使用JWT时如何使用权限/角色处理授权

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

在我的第一个nodejs应用程序中实现授权时,我遇到了一个问题,该应用程序使用expressjs、sequelize和jsonwebtoken进行身份验证。在内部,我想禁止/允许不同用户的路由,我不想使用另一个包,如oauth2或为我处理授权的东西

目前,我已经创建了一个jsonwebtoken,它的有效负载中包含权限角色:

{ 
    "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,您甚至可以实现其更简单的版本

  • 注册一个用户给他一组凭据,假设有用户id和密码(也称为clientid和secret)
  • 每当用户第一次注册时,返回一个JWT,并在您现在执行时设置一个到期时间
  • 正如您提到的,使用它来检查权限
  • 若JWT过期,用户可以通过提供用户id和密码请求新的
  • 我的建议是,如果你不打算使用

    "userid": 1,  
    "name": "John Doe" 
    

    在验证用户访问API的权限之后的任何地方,都不要将它们保存在JWT中。相反,使用JWT的签名,这种方式不需要在网络上保持用户详细信息的流动。:)

    是的,它和webtokens一样安全。这真的不是个好建议。jwt是“安全的”,因为它保证它不会被操纵。但是,您可以轻松读取其有效负载的内容,因为它只是base64编码的。将敏感数据保存在令牌(如密码)中根本不是一个好主意。正如@jpgrassi所提到的,JWT不是存储机密数据的安全场所。保留非机密数据可能是安全的,因为这将保证数据的完整性。