如何在使用JWT

时间:2017-09-11 15:18:05

标签: javascript node.js authorization express-jwt

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

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

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

不,我想在#34; GET / user"等电话中查看。如果允许经过身份验证的用户调用它。

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

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

2 个答案:

答案 0 :(得分:0)

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

  1. 注册用户给他一组凭据,假设有一个user_id和密码(也称为clientid和secret)。
  2. 当用户第一次注册时,会立即返回具有设定到期时间的JWT。
  3. 正如您所提到的,用它来检查权限。
  4. 如果JWT过期,用户可以通过提供user_id和密码来请求新的。
  5. 现在我建议的是你不打算使用

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

    在验证用户访问API的权限后,无论如何都不要将它们保留在JWT中。而是使用JWT的签名,这样就不需要保持用户在网络上的详细信息。 :)

答案 1 :(得分:-3)

是的,JWT可以非常安全地保存机密数据。

对于其他设置,您可以在每个请求上更新jwt令牌,因此每当客户端向您发送jwt令牌时。每个请求都将使用jwt令牌验证用户。每个响应都会将客户端发送到新的jwt令牌以进行下一次请求。