与RESTful API相比,使用RSA签名JWT与SHA相比有什么优势?

问题描述 投票:0回答:1

我有一个后端,它公开了一个RESTful API,该API目前“对所有人免费”(但使用https)。

我现在想添加RBAC(基于角色的访问控制),并且JWT似乎是必去之路,我对JWT有了很多了解,但是看不到使用RSA而不是SHA来对令牌进行签名的优势。

假设用户已经认证并获得了密钥,无论是共享密钥还是公共/私有密钥。

现在,在我看来,在两种情况下-SHA或RSA HMAC-双方(客户端和服务器)都必须具有共享密钥,或者在RSA情况下,它们必须具有私钥/公钥的一半。服务器必须根据JWT中的声明找到该密钥(在表或数据库中),以验证令牌的签名。一旦在JWT中确认了声称的用户,它将使用已配置的角色授权该请求。

那么在那种情况下RSA有什么优势?

rest jwt rsa hmac sha
1个回答
0
投票

我假设您在这里谈论的是RSxxx(例如RSA256)和HSxxx(例如HS256(HMAC-SHA256))算法。主要区别在于HS256是对称算法,而RS256是非对称算法。对称算法仅使用一个密钥(或秘密)进行签名和验证,而非对称算法则使用私钥进行签名,并使用公钥来验证令牌。

如果您共享用于HS256的机密,那么每个知道该机密的人都可以发布或修改并重新签名令牌。如果您与客户端共享秘密,那将破坏签名的目的。在使用RS256或任何其他非对称算法的情况下,只有身份验证服务器才能知道私钥,并且需要验证令牌的任何人都可以使用公钥来这样做。匹配密钥通常由令牌标题中的KID(密钥ID)声明标识。

但是通常,签名和验证仅在服务器端完成,客户端不需要验证令牌,因此根本不需要知道密钥或秘密。因此,在简单服务的情况下,当身份验证和资源服务器相同时,仍可以依靠对称算法。但是,一旦为多个资源服务器使用一个单独的身份验证服务器,就应该使用非对称算法。

© www.soinside.com 2019 - 2024. All rights reserved.