对于 ASP.NET Web 客户端,在 RS256 和 HS256 之间使用哪个?

Which to use between RS256 and HS256 for ASP.NET web client?

我正在开发 ASP.Net 核心 Web 应用程序,并将使用 Auth0 进行用户身份验证。

我很难确定我的 JSON Web 令牌签名算法应该是 RS256 还是 HS256

从我查到的资料来看,我还是摸不着头脑。有什么想法吗?

尽管这两种算法都使用 SHA-256,但它们根本不同:

  • RS256(RSASSA-PKCS1-v1_5 使用 SHA-256)依赖于生成具有特定 私钥.
  • 的数字签名
  • HS256(HMAC 使用 SHA-256)依赖于 共享秘密 加上加密散列函数 (SHA-256) 来生成一个消息认证码(MAC).

验证与之前每个算法一起发布的令牌意味着对于 RS256 进行验证的实体知道与用于签名的私钥关联的 public 密钥,而对于 HS256 这意味着该实体知道共享秘密。

然后,在两者之间做出选择通常取决于将验证已发行令牌的应用程序的特性。

如果您想在基于浏览器的应用程序上验证令牌,将自动排除 HS256 的使用,因为这意味着您必须在任何人都可以访问的地方包含共享机密,使其完全无用,因为现在任何有权访问代码的人都可以发行自己的签名令牌。

总而言之,如果令牌验证是在受控环境(服务器端)上完成的,您可以选择 HS256,因为它更容易上手。但是,如果令牌验证是在敌对环境中完成的,则需要使用基于非对称密码学的算法;在这种情况下,它将是 RS256.