我有一个公开 RESTful API 的后端,该 API 目前“对所有人免费”(但使用 https)。
我现在想添加 RBAC(基于角色的访问控制),而 JWT 似乎是可行的方法,我阅读了很多有关 JWT 的内容,但没有看到使用 RSA 相对于 SHA 来签署令牌的优势。
假设用户已通过身份验证并获得密钥,无论是共享密钥还是公共/私有密钥。
现在,在我看来,在这两种情况下 - SHA 或 RSA HMAC - 双方(客户端和服务器)都必须拥有共享密钥,或者在 RSA 的情况下拥有各自的一半私钥/公钥。服务器必须根据 JWT 中的声明找到该密钥(在表或数据库中),以便验证令牌的签名。一旦在 JWT 中确认了声称的用户,它将使用配置的角色授权请求。
那么RSA在这种场景下有什么优势呢?
我假设您在这里讨论的是 RSxxx(例如 RSA256)和 HSxxx(例如 HS256 (HMAC-SHA256))算法。主要区别在于HS256是对称算法,而RS256是非对称算法。对称算法仅使用一个密钥(或秘密)进行签名和验证,而非对称算法使用私钥进行签名并使用公钥来验证令牌。
如果您共享用于 HS256 的秘密,那么知道该秘密的每个人都可以发布或修改并重新签署令牌。如果您与客户共享秘密,那么签名的目的就会失效。在 RS256 或任何其他非对称算法的情况下,只有身份验证服务器知道私钥,任何需要验证令牌的人都可以使用公钥来执行此操作。匹配的密钥通常由KID
(Key Id) 令牌标头中的声明。
但通常情况下,签名和验证仅在服务器端完成,客户端不需要验证令牌,因此根本不需要知道密钥或秘密。因此,在简单服务的情况下,当身份验证和资源服务器相同时,您仍然可以依赖对称算法。但是,一旦您为多个资源服务器配备了一台单独的身份验证服务器,就应该使用非对称算法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)