JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON对象的形式安全地传输信息。此信息可以验证和信任,因为它是数字签名的。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
应用场景:
授权:这是使用JWT最常见的场景
信息交流:JSON Web令牌是在各方之间安全传输信息的好方法。
JSON Web令牌由三个部分组成,以点( . )分隔,它们是:
Header
Payload
Signature 签名
JWT通常如下所示:
Header.Payload.Signature
Header:
通常由两部分组成:令牌的类型(JWT)和使用的签名算法(如HMAC SHA256或RSA)。
{ "alg": "HS256", "typ": "JWT"}
对这个JSON进行Base64Url编码以形成JWT的第一部分
Payload:
有效负载,其中包含声明。声明是关于实体(通常是用户)和附加数据的语句。索赔分为三类:登记的、公开的和私人的债权。
{ "sub": "1234567890", "name": "John Doe", "admin": true}
对有效负载进行Base64Url编码,以形成JSON Web令牌的第二部分。
Signature 签名:
如果要使用HMAC SHA256算法,则将按以下方式创建签名:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
参数说明:
HMACSHA256:使用SHA256是因为Header中alg:HS256,如果是alg:HS128,那就是HMACSHA28。
base64UrlEncode:Base64中用的三个字符是"+","/"和"=",由于在URL中有特殊含义,因此Base64URL中对他们做了替换:"="去掉,"+"用"-"替换,"/"用"_"替换,这就是Base64URL算法。
secret:服务器给的 key
Signature :最后将HMACSHA256后的值进行Base64URL后就是需要的签名。
输出是三个Base64-URL字符串,用点分隔,可以轻松地在HTML和HTTP环境中传递,与基于XML的标准(如SAML)相比更加紧凑。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。