75

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

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

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

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

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

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

PS 我在浏览本网站上的示例时了解了 JWS 。

4

2 回答 2

71

JWT 实际上使用JWS 作为其签名,来自规范的摘要

JSON Web Token (JWT) 是一种紧凑的、URL 安全的方式,用于表示要在两方之间传输的声明。JWT 中的声明被编码为 JavaScript 对象表示法 (JSON) 对象,该对象用作 JSON Web 签名 (JWS) 结构的有效负载或 JSON Web 加密 (JWE) 结构的明文,从而使声明成为数字签名或 MACed 和/或加密。

因此,JWT 是一种 JWS 结构,其负载为 JSON 对象。已经定义了一些可选键(或声明),例如,iss等。audexp

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

于 2014-12-24T21:51:27.573 回答
15

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

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

于 2020-05-25T23:00:11.760 回答