具有用户权限的基于 JWT 令牌的授权 Asp.net core 2.0

Posted

技术标签:

【中文标题】具有用户权限的基于 JWT 令牌的授权 Asp.net core 2.0【英文标题】:JWT Token based Authorization with user permission Asp.net core 2.0 【发布时间】:2018-12-25 01:47:44 【问题描述】:

我创建了一个 JWT 令牌,声明为读取或写入或删除权限,如下图所示。

现在,管理员/普通用户都登录到系统。管理员和普通用户获取令牌并存储在本地存储中。

普通用户第一次无法获得读/写/创建/删除 UI 控件。令牌过期时间为 2 分钟。

现在管理员更改数据库中普通用户的权限如下 .

因此,普通用户的令牌不会过期。他仍然不会读写。如果令牌过期然后用户再次登录,则逻辑有效,然后他可以查看读/写 UI 控件

我怎样才能在管理员更改权限的同时实现这一点。

部分参考链接 https://jonhilton.net/identify-users-permissions-with-jwts-and-asp-net-core-webapi/

https://www.jerriepelser.com/blog/using-roles-with-the-jwt-middleware/

【问题讨论】:

在JWT中只存储角色而不存储实际权限,然后在渲染时控制服务器端的权限如何? 我需要刷新 Angular UI 组件,而不仅仅是 webapi 的东西 【参考方案1】:

由于此逻辑在服务器中处理,您需要通知 UI 该用户的权限更改。在这种情况下,像 SignalR 这样很容易与 .NET Core 一起工作的东西可以完美运行。这可以提醒 UI 权限更改,并通过 websockets 事件向用户获取另一个 JWT 令牌,从而解锁 UI 逻辑。然后可以将其重新保存在该用户的本地存储中(显然,如果当前正在使用该平台)

https://docs.microsoft.com/en-us/aspnet/core/signalr/dotnet-client?view=aspnetcore-2.1

我认为 JWT 中没有预先构建的方式来做你想做的事情,JWT 为经过身份验证的用户创建令牌。到期并创建具有有效权限的新有效令牌取决于您。

【讨论】:

关于如何将 SingalR 挂接到你的包中的文档太多了。我为此编写代码示例超出了您问题的答案范围。你知道你需要做什么才能让它在许多博客中工作,那里有如何做到这一点的演示。如果您在发布新问题时遇到困难,我很乐意提供帮助。

以上是关于具有用户权限的基于 JWT 令牌的授权 Asp.net core 2.0的主要内容,如果未能解决你的问题,请参考以下文章

在每个API调用之前验证JWT令牌

Spring Security整合JWT实现权限认证和授权

如何在 Node JS 中使用 jwt 授权具有不同令牌的所有用户

如何执行 Auth0 JWT 令牌用户基于角色的授权

如何让我的 Auth0 权限进入 AWS HTTP API Jwt 授权方的访问令牌的范围声明?

当用户在nodeJS / Express和Angular中空闲一段时间(基于令牌的授权)时,我如何使我的JWT令牌过期