【问题标题】:Which to use between RS256 and HS256 for ASP.NET web client?ASP.NET Web 客户端在 RS256 和 HS256 之间使用哪个?
【发布时间】:2017-04-03 23:13:28
【问题描述】:

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

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

根据我找到的信息,我仍然无法确定它的正面或反面。有什么想法吗?

【问题讨论】:

    标签: asp.net asp.net-core jwt auth0


    【解决方案1】:

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

    • RS256(使用 SHA-256 的 RSASSA-PKCS1-v1_5)依赖于使用特定私钥生成数字签名。
    • HS256(使用 SHA-256 的 HMAC)依靠共享密钥加上加密哈希函数 (SHA-256) 来生成消息验证码 (MAC)。

    验证使用上述每种算法发布的令牌意味着对于RS256,进行验证的实体知道与用于签名的私钥相关联的公钥,而对于HS256,这意味着该实体知道共享秘密.

    在一种与另一种之间进行选择通常是由将验证已发行令牌的应用程序的特性所驱动的。

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

    总之,如果令牌验证是在受控环境(服务器端)上完成的,您可以选择HS256,因为它更容易上手。但是,如果令牌验证是在恶劣的环境中完成的,您需要使用基于非对称加密的算法;在本例中为RS256

    【讨论】:

    • 等一下,“如果您想在基于浏览器的应用程序上验证令牌,则自动排除使用 HS256” - 为什么您怀疑客户端代码需要知道秘密?据我了解,客户端只会将令牌附加到API的每个请求中,并且在登录后通过Auth0将令牌返回给客户端。
    • 该短语的关键字是validate;如果您想在基于浏览器的应用程序中验证令牌,那么验证逻辑很可能是客户端的。客户端仅中继令牌的情况意味着客户端将验证它,因此它不在我提到的条件范围内。例如,ID 令牌旨在由客户端应用程序(可以是基于浏览器的应用程序)验证,而访问令牌仅由客户端中继到资源服务器。
    • 感谢@João Angelo 的解释!现在我明白了,“验证”确实是关键:)
    猜你喜欢
    • 2016-11-22
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多