在JSON Web令牌(JWT)的头部分指定算法有什么用途?

在JSON Web令牌(JWT)的头部分指定算法有什么用途?,json,algorithm,oauth,token,jwt,Json,Algorithm,Oauth,Token,Jwt,我在读关于JWT的书。我看到JWT是由头、声明和通过算法用密钥签名(加密)构成的。标题部分主要包含算法和类型 标题:{“alg”:“HS256”,“typ”:“JWT”} 在资源(应用程序)服务器上进行解密时,我们已经知道身份验证服务器用于签名(加密)令牌的算法,只有这样,我们才能解密令牌并获得JWT的头和声明部分。因为我们应该已经知道auth服务器用来解密它的算法,所以我不认为在JWT的头部分添加算法有任何用途 编辑-重新表述问题-只有在我们解密令牌后,我们才知道用于加密令牌的算法是什么,但为

我在读关于JWT的书。我看到JWT是由头、声明和通过算法用密钥签名(加密)构成的。标题部分主要包含算法和类型

标题:
{“alg”:“HS256”,“typ”:“JWT”}

在资源(应用程序)服务器上进行解密时,我们已经知道身份验证服务器用于签名(加密)令牌的算法,只有这样,我们才能解密令牌并获得JWT的头和声明部分。因为我们应该已经知道auth服务器用来解密它的算法,所以我不认为在JWT的头部分添加算法有任何用途

编辑-重新表述问题-只有在我们解密令牌后,我们才知道用于加密令牌的算法是什么,但为了解密本身,我们需要知道使用的算法


有人能解释一下在JWT的头部分指定算法的目的吗?

这是为了明确起见:这样与JWTs交换的各方就不会猜测了。此外,它还具有向前兼容性:如果有一天您更改了算法,您不会希望所有有效令牌立即失效。PS:“只有这样我们才能解密令牌”-如果你只是对令牌签名-它不是加密的,基本上是纯文本。@zerkms-我理解。只有在我们解密令牌之后,我们才知道用于加密令牌的算法是什么。为了解密自身,我们需要知道使用的算法。这就是我的困惑所在。如果我们将来更改算法,那么我们应该尝试使用旧的algo 1st解密令牌,然后使用用于加密的当前algo解密令牌。如果情况也是这样,我们不需要在报头中使用algo。这是一种常见的方法,几乎所有(或所有?)公共序列化格式都包含带有编码属性的元信息。您可以自由实现不包含标题的派生标准。PS:正如我前面提到的,在大多数广泛使用的情况下,令牌不是加密的,而是经过签名的。