客户端 JWT 基于角色的授权

Posted

技术标签:

【中文标题】客户端 JWT 基于角色的授权【英文标题】:Client-side JWT role-based authorization 【发布时间】:2017-06-24 03:44:05 【问题描述】:

我了解 JWT 可以包含一些有关要在服务器上验证的用户角色的信息,例如在scope 中,这样非角色用户将无法从受该角色保护的某些端点访问数据。


  "iss": "http://issuer.com",
  "exp": 1300819380,
  "scopes": ["customer", "supplier", "seller"],
  "sub": "user@issuer.com"

所以数据是安全的。但假设我有一个仪表板,我想阻止用户查看其功能。

考虑到 JWT 可以被客户端篡改,您如何在 SPA 中保护此类页面?

【问题讨论】:

【参考方案1】:

如您所述,客户端代码可能会被篡改,因此对于限制用户访问的逻辑来说,它不是一个安全的地方。

假设仪表板的功能实际上是 API 提供的功能(例如,查看通过 GET 请求检索到的数据,或通过 POST、PUT、DELETE 请求操作数据),您可以改为保护这些 API 端点。因此,即使恶意用户篡改了客户端代码,他们也不会获取或更改任何受保护的数据。

但是对于您关于如何保护 SPA 中的页面的具体问题,没有这样的方法。即使代码被混淆了,它仍然可以让老练的用户任意剖析和更改。

【讨论】:

感谢您的建议。实际上,我提到的仪表板的功能是在单页应用程序中加载的,并且独立于 API 数据。我也想保护这些功能。我知道一个老练的攻击者可以绕过我采取的任何客户端措施,但我正在寻找一种可以防止其他 99% 的设置。

以上是关于客户端 JWT 基于角色的授权的主要内容,如果未能解决你的问题,请参考以下文章

使用 Keycloak 和 .NET 核心的基于角色的授权

基于角色的 jwt 授权

在基于 Web 浏览器的客户端上存储授权(或 JWT)令牌的位置?

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

Spring Boot JWT token 基于角色的授权问题

服务器如何在基于令牌的授权中将 JWT 发送给客户端?