JSON Web Signature(JWS)和JSON Web Token(JWT)有什么区别?

时间:2014-12-24 18:28:12

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

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

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

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

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

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

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

P.S。我在浏览this website上的示例时了解了JWS。

2 个答案:

答案 0 :(得分:40)

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

  

JSON Web Token(JWT)是一种紧凑,URL安全的表示方式   声称要在双方之间转让。 JWT的主张是   编码为用作的JavaScript Object Notation(JSON)对象   JSON Web签名(JWS)结构的有效负载或作为   JSON Web加密(JWE)结构的明文,启用   声称要进行数字签名或MAC和/或加密。

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

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

答案 1 :(得分:2)

简单地说, JWT(JSON Web令牌)是一种将声明(即名称-值对)声明为JSON对象的方法。 JWT spec定义了一组在两方之间使用或转移的标准声明。

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