gpt4 book ai didi

authentication - 我应该在客户端使用身份验证 JWT 中包含的数据吗?

转载 作者:行者123 更新时间:2023-12-01 13:40:23 25 4
gpt4 key购买 nike

服务器在身份验证期间向客户端提供 JWT。该 JWT 包含稍后由服务器使用的信息。例如,JWT 可能包含 permissions 数组,其中列出了授予特定用户的所有权限。

如果客户端解析 JWT 并使用其中包含的权限信息,这是否被视为不良做法?客户端对服务器进行额外调用(例如,GET/permissions)并根据该响应执行操作是否更好?

最佳答案

这在很大程度上取决于很多小细节;我会尽量不忘记任何事情,但理论上这样做应该没问题,如果满足某些条件,我不会认为这是一种不好的做法

OAuth2 声明访问 token 对客户端应该是不透明的,但 JWT 只是一种 token 格式 (Learn JSON Web Tokens),它在其他情况下的使用并不意味着与 OAuth2 相同的规则。

另请注意,从额外请求中获取信息的最终结果与多调用一次的额外开销相同。如果权限非常不稳定,因为您可以重复调用,这会有一点好处。

但是,重要的部分更侧重于您所说的客户的意思以及客户将如何使用该信息,因此我将对此进行详细说明。

假设:

  1. 您提到的客户端可以部署为基于浏览器的应用程序 (SPA)、 native 应用程序或充当客户端的某些服务器端组件。
  2. 服务器和客户端都由同一个实体控制。
  3. 客户端和服务器组件可以看作是一个单一的应用程序,也就是说,对于最终用户来说,客户端和服务器组件的存在没有区别;他们将它们作为一个整体来使用。

说明

在这种情况下,服务器颁发的 token 只是客户端稍后访问 protected 资源而无需再次显式用户身份验证的一种方式;它是一种在两个组件之间维持 session 的机制。

鉴于同一实体同时控制客户端和服务器,将接收到的 token 视为白盒而不是黑盒是可以接受的。然后客户端可以解释 token 中的信息并利用它为最终用户提供更好的体验。但是,这意味着服务器将需要继续验证 token 及其相应的权限;客户对数据的任何解释纯粹是为了提供可选功能。

此外,对于部署到恶劣环境中的客户端,例如 SPA 应用程序,通过查看数据做出的决定只能产生纯粹的美学决定,因为用户可能会伪造权限数据 .例如,您可以使用它有条件地隐藏/禁用某些用户界面,这样用户就不必单击它就可以发现不允许这样做。

一个很好的类比是 Web 表单中基于 Javascript 的输入验证;您应该这样做以获得更好的用户体验,但服务器将需要再次执行此操作,因为用户可以绕过 Javascript 验证。

关于authentication - 我应该在客户端使用身份验证 JWT 中包含的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40803971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com