在一句话中,JWT的原理实际上很简单。编写API的学生应该熟悉参数的签名,以防止API非法被称为。最简单的方法是将各种参数拼写到字符串中,添加一个钥匙,最后将MD5作为签名。只要请求的签名与不匹配,您就可以认为参数已被恶意更改。JWT是调节此。部分是参数,签名部分是签名。
最近,我想为OAuth2制作一个API界面,但是OAuth2的常规几乎会提出另一个概念是JWT(JSON Web令牌)。他与oauth2有关系吗?经过深刻的理解,我发现它们没有密切相关,那么JWT是什么?
简而言之,JWT是一种原始协议(协议),他的优势对URL简单且安全。其他优势是可以从会话访问的压力中删除服务器。同时,在集群机或多个孩子站,它也消除了会话需要同步的麻烦。
以下是JWT身份验证方法的简单图片
实际上,我认为JWT与浏览器环境中的传统曲奇会议非常相似。验证身份后,服务器生成cookie和session关联,即会话ID,cookie存储为浏览器,并且会话由服务器保存。在验证中,您可以通过cookie获得会话会话ID。如果您获得了正确的会话数据,则认证成功。
在JWT的验证方法中,JWT扮演cookie的角色(浏览器通常保留JWT存款cookie)。当客户需要身份身份验证时,它会传输回JWT。不同之处在于,服务器端目前不需要通过会话获得身份信息。取而代之的是,它直接在jwt..thest中直接提取信息,JWT不是一个简单的令牌,而是可以编码信息的数据(JSON格式)。服务器验证签名合规性指示可以携带的数据,否则身份验证失败。由于信息是在JWT中编码的,因此可以免除会话查询的消费。JWT中的数据需要通过比较签名来正确确保。当然,签名所需的密钥只能在服务器中存在。JWT的分布和服务器上的验证逻辑的处理是确保安全的关键。
简而言之,它最初将数据包装在cookie中,然后进行签名以验证数据的正确性。
首先,举起栗子,这是JWT。
基础64之后,以下三个数据缝制了它。
header.payload.signature
以下解释
ALG用于声明使用什么哈希算法,请参阅详细信息。
负载是携带的数据。有一些官方定义的标准字段也可以添加自己的数据。
其中,Sub是标准字段,并且可以使用通用标准字段
名称,管理员是一个自定义数据,您可以在此处添加任何内容,但是请注意,这些数据是公开的,不能添加敏感信息。
此示例具有隐藏的安全隐患,即没有有效期期,因此可以无限制地使用ADD EXP或IAT。
这是JWT认证的核心。由于基本64编码基本上是披露,并且很容易被篡改,如何确保信誉。这是签名。签名是由头部(标题),有效负载和A产生的哈希值。键,即使以前的数据很容易被篡改,如果您不知道签名的关键,则很难确保签名是正确的。
说JWT与OAuth2无关,因为JWT只是一个令牌协议,而OAuth2是一组完整的身份验证逻辑。也许是因为基于此功能的API环境中的传统会话,大多数OAuth2使用JWT作为JWT作为jwt作为代币OAuth2。因此,OAuth2和JWT形成了困难的联系。