我正在开发一个ASP.Net Core Web应用程序,并将使用Auth0进行用户身份验证。
我很难弄清楚我的JSON网络令牌签名算法应该是RS256
还是HS256
。
根据我发现的信息,我仍然无法做出正面或反面。有什么想法吗?
答案 0 :(得分:3)
尽管两种算法都使用SHA-256,但它们根本不同:
RS256
(使用SHA-256的RSASSA-PKCS1-v1_5)依赖于生成具有特定私钥的数字签名。HS256
(HMAC使用SHA-256)依赖于共享密钥加上加密哈希函数(SHA-256)来生成消息验证码(MAC)。验证使用以前的每个算法发出的令牌意味着对于RS256
,执行验证的实体知道与用于签名的私钥相关联的公钥,而对于HS256
,它意味着实体知道共享的秘密。
然后通常会根据将验证已发行令牌的应用程序的特征来选择在一个与另一个之间进行选择。
如果要在基于浏览器的应用程序上验证令牌,则会自动排除HS256
的使用,因为这意味着您必须将共享密钥包含在任何人都可以访问的位置,它完全没用,因为现在任何有权访问代码的人都可以签发他们自己签名的令牌。
总之,如果在受控环境(服务器端)上完成令牌验证,您可以使用HS256
,因为它更容易上手。但是,如果在恶意环境中进行令牌验证,则需要使用基于非对称加密的算法;在这种情况下,RS256
。