Bli*_*ddy 2 rest rsa sha hmac jwt
我有一个后端,它公开了一个 RESTful 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) 声明标识。
但通常情况下,签名和验证只在服务器端完成,客户端不需要验证令牌,因此根本不需要知道密钥或秘密。因此,您可以在简单服务的情况下,在身份验证和资源服务器相同的情况下,仍然依赖对称算法。但是,一旦您为多个资源服务器拥有一个单独的身份验证服务器,就应该使用非对称算法。
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |