{
"typ": "JWT",
"alg": "HS256"
}
{
"userId": "b08f86af-35da-48f2-8fab-cef3904660bd"
}
// signature algorithm
data = base64urlEncode( header ) + “.” + base64urlEncode( payload )
hashedData = hash( data, secret )
signature = base64urlEncode( hashedData )
// header
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
// payload
eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ
将编译后的 header payload 进行拼接,使用指定的签名算法和密钥对它计算。在我们例子中,也就是使用 HS256 算法,密钥为字符串 secret
,对字符串 data
计算得到字符串 hashedData
。然后,通过 base64url 对字符串 hashedData
编码得到下面的 JWT 签名(signature)
// signature
-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM
header.payload.signature
使用 JWT 的目的不是以任何方式隐藏或者模糊数据,使用 JWT 的目的是为了证明发送的数据是由可信的源(用户)创建的基于 cookie 的跨域认证
1、用户向服务器发送用户名和密码。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。