cryptography - 何时为 JWT 使用 RS256?

标签 cryptography jwt rsa digital-signature hmac

所以,现在我正在构建一个供第三方使用的 API,我正在阅读有关 RS256 和 HS256 的信息。我的理解是,在第一个中,您使用公钥进行验证,使用私钥进行签名,而另一个只使用一个 key 。因此,如果您使用 RS256,如果您想保留您的 key 安全并希望客户端验证 token ,但我不明白您为什么要在客户端验证 token ?因为您向服务器发出了一个 post 请求,所以它会向您发送一个 token ,每当您想要发出授权请求时,您只需使用该 token ,服务器会验证它并让您继续(如果没问题)。那么,为什么要在客户端验证 token ?我认为这是后端的职责。

我想也许我错了,希望你能帮助解决这个问题。谢谢。

编辑:

所以,我的问题是,我知道 RS256 和 HS256 之间的区别,但我不明白它是如何使用它的流程。现在我正在开发第三方 api,我只需要在客户端请求时返回一个 token ,然后在需要它的请求中,只需从服务器验证它是否是一个有效的 token 。据我了解,当您想从客户端验证 token 时使用 RS256,如果正确,有人可以给我一个示例,说明您何时或为什么要在客户端验证 token ?

最佳答案

在以下情况下使用 RS256:

  • token 由第三方签名 ,通常是身份提供者(例如 oauth2/oidc),您需要验证 token 是否由受信任的实体
  • 颁发
  • token 由客户签名 ,通常是为了访问 API,客户端之前已在其中注册了公钥
  • token 由 SingleSignOn 系统中的集中式身份验证服务器签名它们用于访问多个联合服务器
  • token 用于在两方之间传输数据 ,不一定用于身份验证,并且签名用于确保签名人的身份

  • 在以下情况下使用 HS256:
  • token 由同一服务器签名和验证
  • 关于cryptography - 何时为 JWT 使用 RS256?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49562581/

    相关文章:

    java - sun.security.rsa.RSAPublicKeyImpl 的开源替代品

    java - 使用 OpenSSL 签名消息;无法使用 Android Java 进行验证

    PHP AES 加密/解密

    c - 通过传递数组作为输入数据来实现 AES-128 CBC

    http - JSON Web Token 如何比 cookie/session 更安全?

    c# - 如何使用 PEM 文件中的 rsa 解密

    .net - 利用 ASP.NET machineKey 加密我自己的数据

    javascript - 避免在每个请求上验证 jwt token

    python - Keycloak KubeAPI 认证失败

    python - 使用python-rsa加密消息时出现溢出异常