【问题标题】:How to handle Authorization with Permission/Roles while using JWT使用 JWT 时如何使用权限/角色处理授权
【发布时间】:2018-02-19 21:28:00
【问题描述】:

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

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

{ 
    "userid": 1,  
    "name": "John Doe",  
    "permissions" : ["user_get", "user_post", "user_put"]
    "iat": 1505142542,  
    "exp": 1505146142
}

不,我想在“GET /user”之类的调用中检查是否允许经过身份验证的用户调用它。

我的问题是:使用这种方法是否安全,或者我不应该在 jwt 中包含权限?另一种选择是询问数据库并检索权限,而不是检查有效负载。

此外,如果服务器使用户无效,令牌将被检查是否仍然有效。

【问题讨论】:

  • 是的,它和 webtoken 一样安全。

标签: javascript node.js authorization express-jwt


【解决方案1】:

JWT 安全且良好。如果您了解 OAuth2,您甚至可以实现其更简单的版本。

  1. 注册一个用户,给他一组凭据,假设一个 user_id 和密码(也称为 clientid 和 secret)。
  2. 每当用户第一次注册时,都会返回一个设置了到期时间的 JWT,就像您现在所做的那样。
  3. 正如您所说,使用它来检查权限。
  4. 如果 JWT 过期,用户可以通过提供 user_id 和密码来请求新的。

现在我的建议是,如果你不打算使用

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2018-03-09
    • 2020-04-10
    • 2016-07-20
    • 2015-01-06
    • 2020-07-09
    • 2019-09-17
    相关资源
    最近更新 更多