何时使用RS256生成JWT?

10
所以,我现在正在为第三方使用构建API,我正在阅读关于RS256和HS256的内容。 我理解的区别是,在第一个中,您使用公钥进行验证和私钥进行签名,而在另一个中,则只使用一个密钥。因此,如果您使用RS256,因为您希望保护秘密密钥并希望客户端验证令牌,但我不明白为什么您想在客户端验证令牌? 因为您向服务器发送POST请求,然后它会将令牌发送回您,并且每当您想要进行授权请求时,您只需使用该令牌,服务器就会对其进行验证并在确定无误后让您继续。那么,为什么您想要在客户端验证令牌呢? 我认为可能是我哪里错了,请帮我澄清一下,谢谢。
编辑:所以,我的问题是,我知道RS256和HS256之间的区别,但我不理解如何使用它们。 现在我正在开发第三方api,我只需要在客户端请求令牌时返回令牌,然后在需要它的请求中,只需从服务器验证是否为有效令牌即可。 据我所知,当您想要在客户端验证令牌时,会使用RS256,如果这是正确的,请给我一个示例,说明何时或为什么要在客户端验证令牌?

你的句子“所以我不明白为什么你想在客户端验证令牌?”没有任何意义,因为它与你之前说的内容没有关系。编辑你的问题,让它更清楚你想做什么和你的问题是什么。 - Robert
@Robert,我已经编辑过了,希望你现在能够理解。 - Leonardo Emilio Dominguez
可能是RS256与HS256:有什么区别?的重复。 - Matt Morgan
1个回答

27

在以下情况下使用RS256:

  • 令牌由第三方签名,通常是标识提供者(例如oauth2/oidc),您需要验证该令牌是否由值得信任的实体颁发。

  • 令牌由客户端签名,通常用于访问API,在这种情况下,客户端先前已注册了公钥。

  • 令牌由单点登录系统中的集中身份验证服务器签名,并且它们用于访问多个联合服务器。

  • 令牌用于在两个方之间传输数据,不一定是为了进行身份验证,签名用于确保签署者的身份。

在以下情况下使用HS256:

  • 令牌由同一服务器签名和验证

关于由客户签名的令牌,这就是像Facebook、Stripe和其他第三方API所做的吗?他们会提供给你一个公钥和一个私钥,这样你就可以在你的服务器上生成令牌来访问API,而不是向他们的服务器请求访问权限? - Leonardo Emilio Dominguez
1
我不知道这些API的确切工作方式,但当您使用非对称密钥时,您会在设备上生成密钥对(私钥和公钥),私钥存储在本地,而公钥在注册过程中发送到服务器。第三方服务器不会将密钥发送给您。要进行身份验证,您需要生成一个令牌并使用私钥对其进行签名。 - pedrofb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接