当前位置: 首页 > 知识库问答 >
问题:

如何在使用JWT时处理带有权限/角色的授权

谷永贞
2023-03-14

在我的第一个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中包含权限吗?另一种方法是询问数据库并检索权限,而不是检查有效负载。

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

共有2个答案

云文栋
2023-03-14

是的,JWT保存机密数据非常安全

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

朱海超
2023-03-14

JWT是安全和良好的。如果你知道OAuth2,你甚至可以实现它更简单的版本。

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

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

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

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

 类似资料:
  • 假设一个web安全系统由5个表组成,这些表处理web应用程序的授权部分: 用户 角色 权限 角色权限(角色和权限之间的多对多) 用户角色(用户和角色之间的多对多) 有时,用户需要被授予对权限规则的短时间访问权限,然后再次删除,例如当某人外出度假,而其他人需要接管他的任务时。简单的回答是创建一个新角色,将该角色分配给用户,当不再需要该角色时,从用户中删除该角色或完全删除该角色。 我不想一直为这样的事

  • Using a delegation key The collaborator can now push to the repository using Docker Content Trust. Docker will automatically choose and pick the right key for the targets/release role. Edit the file o

  • 角色是分配给用户的权限集合。默认情况下,Navicat Monitor 包含三个预定义的角色供你分配给不同用户以限制其访问权限。它还允许你创建具自定义权限设置的新角色。苃要配置角色及其权限,请前往“配置”->“角色和权限”。 每个预定义的角色都有不同的权限: 角色 权限 管理员 可以完全控制访问所有页面。此角色的权限是不可编辑的。 DBA 可以访问所有页面,但以下功能“除外”: - 激活令牌密钥,

  • 我分配一个角色权限来创建数据库。相同的角色被分配给登录用户,但是当我试图使用分配角色的登录用户创建新数据库时,我得到权限拒绝错误。 无法执行语句。权限拒绝,数据库主,所有者dbo。运行此命令需要以下权限:CREATE DATABASE。赛贝斯错误代码=10331严重级别=14,状态=3,事务状态=0第1行 我用15.5分和16分试了一下。我做错什么了吗?我们需要考虑其他参数吗?我经历了这次讨论 h

  • 我有表: 用户、角色 数据透视表: 角色\u用户 模型: 用户、角色和权限。 现在我想实现的是,假设admin在控制面板中添加了新权限。那么,糟糕的是,作为一名开发人员,我必须站起来,打开代码,手动将这个新添加的权限放在一些路由的中间软件中。每次管理员授予新权限时,我都必须手动添加代码。 是否有任何方法可以动态执行所有这些操作,以便在管理员添加新权限后,我不会更改任何内容,也不会添加代码,并且新权

  • 是否有一些配置可以为特定角色的网站页面提供默认权限? 与我们在控制面板中的功能类似→ 门户设置→ 用户,这里我们可以指定创建用户时可以为用户分配哪些角色、站点或用户组。 详细说明: 我创建了一个新角色,比如,Role 我知道这是可能的,通过一个侦听器钩子,拥有一个并重写各种方法,但我正在寻找另一个更简单或更干净的解决方案。 谢谢