JWT是否应包含有关客户端的权限和角色的信息?
在JWT令牌中具有此类信息将非常有用,因为每次有有效令牌出现时,都将更容易提取有关用户权限的信息,并且无需为此调用数据库。但是,将这样的信息包括在数据库中而不对它们进行仔细检查是否会带来安全问题?
要么,
诸如上述信息之类的信息不应成为JWT的一部分,而应该仅使用数据库来检查用户的访问角色和权限?
JWT是否应包含有关客户端的权限和角色的信息?
在JWT令牌中具有此类信息将非常有用,因为每次有有效令牌出现时,都将更容易提取有关用户权限的信息,并且无需为此调用数据库。但是,将这样的信息包括在数据库中而不对它们进行仔细检查是否会带来安全问题?
要么,
诸如上述信息之类的信息不应成为JWT的一部分,而应该仅使用数据库来检查用户的访问角色和权限?
Answers:
将声明包含在令牌中的目的是使您不必在资源和身份验证提供程序之间进行通信。
资源仅可以检查令牌是否具有有效签名并信任内容。
假设私钥对身份验证服务器是私有的,那么您就很好。一些提供商改变了密钥以减轻风险。
如果您考虑一下,资源是否会回拨给auth服务器以获取声明。然后,从根本上确保它通过类似的信任方法与正确的服务器通信。
根据我的经验,如果您的所有系统都使用某个中央角色和权限数据库,则可以将所有内容添加到JWT中。
但是,当auth服务器本身对接收和信任令牌的目标系统一无所知时,此方法在SSO方案中可能无法很好地工作。
用户的角色和权限完全取决于JWT令牌的接收者。当您将具有JWT的SSO auth集成到一些已有其权限子系统的旧系统中时,尤其如此,因此它们仅需要在JWT中存在一个声明-用户身份声明。