【问题标题】:What is the difference between JSON Web Signature (JWS) and JSON Web Token (JWT)?JSON Web 签名 (JWS) 和 JSON Web 令牌 (JWT) 有什么区别?
【发布时间】:2023-04-08 05:18:02
【问题描述】:

我一直在用 Java 编写一个 RESTful 服务。这是我到目前为止所理解的(如果我错了,请纠正我):

令牌授权是使用 JSON Web 令牌 (JWT) 完成的,它具有三个部分:标头、有效负载和机密(在客户端和服务器之间共享)。

我理解了这个概念,并在阅读 JWT 时偶然发现了 JSON Web Signature (JWS)

JWS 也是一个类似于 JWT 的编码实体,具有标头、有效负载和共享密钥。

问题: JWT和JWS这两个概念有什么区别?如果它们在技术上相似,那么它们的实现有什么区别?

这是我第一次使用基于令牌的身份验证,所以我可能完全误解了这个概念。

附:我在浏览 this website 上的示例时了解了 JWS。

【问题讨论】:

    标签: rest jwt restful-authentication http-token-authentication


    【解决方案1】:

    JWT 实际上使用 JWS 作为其签名,来自spec's abstract:

    JSON Web Token (JWT) 是一种紧凑的、URL 安全的表示方式 要求在两方之间转让。 JWT 中的声明是 编码为 JavaScript 对象表示法 (JSON) 对象,用作 JSON Web 签名 (JWS) 结构的有效负载或作为 JSON Web 加密 (JWE) 结构的明文,启用 声称经过数字签名或 MAC 化和/或加密。

    因此,JWT 是一个以 JSON 对象作为有效负载的 JWS 结构。已经定义了一些可选键(或声明),例如issaudexp 等。

    这也意味着它的完整性保护不仅限于共享机密,还可以使用公钥/私钥加密。

    【讨论】:

    • 好吧,这是有道理的。那么,如果有效负载包含声明集,我的用户信息会去哪里?你能给我举个例子吗?
    • 请在此处查看规范附录 A 中的示例:tools.ietf.org/html/draft-ietf-oauth-json-web-token-32
    • 声明将包含用户信息。这是一个代码示例,cmets 谈论发生了什么bitbucket.org/b_c/jose4j/wiki/JWT%20Examples
    • @HansZ。附录 A 中的示例仅显示 JWT。我有兴趣查看 JWS 的示例,以便了解 JWT 和 JWS 之间的区别。
    【解决方案2】:

    简单地说,JWT (JSON Web Token) 是一种将名称-值对的声明表示为 JSON 对象的方式。 JWT spec 定义了一组在两方之间使用或传输的标准声明。

    另一方面,JWS(JSON Web 签名) 是一种在两方之间传输 JWT 有效负载并保证完整性的机制。 JWS spec 定义了多种对负载进行签名(例如 HMAC 或数字签名)的方式以及对内容进行序列化以通过网络传输的多种方式。

    【讨论】:

      猜你喜欢
      • 2015-04-09
      • 2016-08-01
      • 2021-07-03
      • 2014-11-27
      • 2016-07-20
      • 2016-02-12
      • 2020-02-22
      • 2019-03-25
      • 2020-07-10
      相关资源
      最近更新 更多