当前位置:首页 > Web开发 > 正文

就可以返回给用户

2024-03-31 Web开发

免费获得官方JWT手册并深入学习JWT吧!

简介

JSON Web Token(缩写JWT),是一套开放的标准(RFC 7519),它界说了一种紧凑且自URL安适的方法,以JSON东西的方法在各方之间安适地进行信息传输。由于此信息是颠末数字签名的,因此是可以被验证和信任的。可以使用密钥(secret)(使用HMAC算法)或者使用RSA或ECDSA的公有/私有密钥对JWT进行签名。

虽然可以对JWT进行加密用来在各方之间供给保密性,但我们还是重点存眷下签名的令牌(token)自己,签名的令牌可以验证此中包罗的声明的完整性,而加密的令牌则将这些声明在其他方的面前进行隐藏,以供给安适性。当使用公钥/私钥对对令牌进行签名时,签名还可以证明只有持有私钥的一方才是对其进行签名的一方。

JWT应用场景

一些常用到JWT的情况:

授权:这是使用JWT的最常见方案。一旦用户登录,每个后续请求将包孕JWT,从而允许用户访谒该令牌允许的路由,处事和资源。单点登录是当今广泛使用JWT的一项成果,因为它的开销很小并且撑持跨域。

信息交换:JWT是在各方之间安适地传输信息的好要领。因为可以对JWT进行签名(例如,使用公钥/私钥对)。别的,由于签名是使用Header和Payload计算的,因此还可以验证内容是否遭到篡改。

JWT数据布局

JSON Web Token以紧凑的形式由三部分构成,这些部分由点(.)分隔断绝分手,分袂是:

Header

Payload

Signature

大抵格局如下所示:

xxxxx.yyyyy.zzzzz

下面来看下具体每个部分:

Header

Header凡是由两部分构成的一个JSON东西:令牌的类型(即JWT)和所使用的签名算法,例如HMAC SHA256或RSA。例如:

{ "alg": "HS256", "typ": "JWT" }

最后,将上面的 JSON 东西使用Base64URL编码(转成字符串作为第一部分。

Payload

第二部分是包罗声明的Payload(有效载荷),声明是有关实体(凡是是用户信息)以及一些特别数据的说明,用来通报实际的数据。声明有三种类型:

标准注册的声明:这些是一组非强制性的但建议使用的预界说字段集,用来供给有用、可互操纵的声明。

以下官方供给的一些字段,完整字段可检察标准文档:
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必需要大于签发时间
nbf: 界说在什么时间之前,该jwt都是不成用的.
iat: jwt的签发时间
jti: jwt的独一身份标识,主要用来作为一次性token,从而回避重放打击。

注意:以上声明的字段仅是三个字符,因为JWT是紧凑的。

大众的声明:这些声明可以由使用JWT的人进行自界说. 但是为了制止斗嘴,这些声明应该在IANA JSON Web Token Registry中界说过,或者被界说为包罗一个抗斗嘴名称空间的URI

私有的声明:这些是自界说的声明,用于在双方同意使用它们的情况下共享信息,而不是注册或果然声明。一般不建议存放敏感信息,,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。

例如,界说一个payload:

{ "sub": "1234567890", // 标准声明 "name": "John Doe", // 大众声明 "admin": true // 自界说 }

然后,同样地对payload进行Base64Url编码,作为JSON Web Token的第二部分。

对付已签名的令牌(token),尽管信息可以防备篡改,但任何人都可以读取。除非将其加密,否则请勿将敏感信息放入JWT的Payload或Header元素中。

Signature

Signature 部分是对前两部分的签名,防备数据篡改。
要生成签名部分,需求按照编码的Header,编码的Payload,一个指定的密钥(secret),通过Header指定的算法(默认是HMAC SHA256算法),然后生成签名。
例如,如果要使用HMAC SHA256算法,则将通过以下方法创建签名:

HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

生成JWT

最后把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔断绝分手,就可以返回给用户。
输出是三个由点分隔断绝分手的Base64-URL字符串,可以在HTML和HTTP环境中轻松通报这些字符串,与基于XML的标准(例如SAML)对比,它更紧凑。
下面显示了一个JWT,它已对先前的Header和Payload进行了编码,并用一个密钥(secret)进行签名。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30546.html