详细说明使用JWT实现单点登录(完整跨域方案)
什么是JSON网络令牌(JWT)?
官方文件解释如下:JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以作为JSON对象在各方之间安全地传输信息。该信息可以通过数字签名进行验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
虽然JWT可以加密,以提供各方之间的保密性,但它将只专注于签署令牌。签名令牌可以验证其中包含的声明的完整性,而加密令牌隐藏了其他方的声明。当用公钥/私钥对签署令牌时,签名还证明只有持有私钥的一方是签署私钥的一方。
一般来说,JWT是一个带有签名和用户相关信息的加密字符串。当页面请求验证登录界面时,请求头携带JWT字符串到后端服务,后端匹配签名加密字符串以确保信息没有被篡改。如果验证通过,则视为可靠请求,数据正常返回。
JWT什么时候合适?
授权:这是解决单点登录问题最常见的使用场景。JWT之所以被广泛使用,是因为它使用起来轻便,开销低,而且服务器不需要记录用户状态信息(无状态)。信息交换:JWT是在服务之间安全传递信息的好方法。因为JWT可以签名,例如,使用一个公共/私有密钥对-它可以确定请求者是合法的。此外,由于签名是使用报头和有效载荷计算的,因此也可以验证内容是否未被篡改。JWT的结构是什么?
JWT由三个部分组成,它们是报头信息、有效载荷和签名,用(.)分隔。),格式如下:
Xxx.yyy.zzzheader(标题信息)
它由两部分组成:令牌类型(即JWT)和哈希算法(HMAC、RSASSA、RSASSA-PSS等)。),例如:
{'alg' :' hs256 ',' typ' :' JWT'}然后,这个JSON被编码为Base64Url,形成JWT的第一部分。
有效载荷
JWT的第二部分是有效载荷,其中包含索赔。声明是关于实体(通常使用用户信息)和其他数据的陈述。有三种类型的索赔:注册索赔、公共索赔和私人索赔。
注册声明:这些是一组预定义的声明,不是强制性的,而是推荐的,iss(发布者)、exp(到期时间)、sub(主题)、aud(受众)等。
公共声明:自定义声明,注意不要与JWT注册表中的属性冲突,可以在这里查看JWT注册表。
私人索赔:这些是自定义索赔,用于在同意使用这些索赔的各方之间共享信息。它们既不是注册索赔,也不是公共索赔。
以下是有效负载的示例:
{'sub' :' 1234567890 ',' name' :' John Doe ',' admin' : True}然后,它被Base64Url编码,形成JWT的第二部分;
注意:对于签名令牌,任何人都可以读取该信息,尽管它可以防止篡改。除非加密,否则不要将敏感信息放入有效负载或标头元素中。
签名
要创建签名部分,必须采用并签名编码报头、编码有效载荷、密钥和报头中指定的算法。
例如,如果您想使用HMAC SHA256算法,签名将按如下方式创建:
HMAC sha 256(Base64 URENCODE(标头)'.'Base64 URLENCODE (Payload,Secret)签名用于验证消息在这个过程中没有被篡改,它还可以验证JWT的请求者是否是它声称的请求者。
输出是三个由点分隔的Base64-URL字符串,可以在HTML和HTTP环境中轻松传输,比SAML等基于XML的标准更紧凑。例如:
eyjhbggcioijiuzi 1 nisinr 5 CCI 6 ikpxvcj 9。eyjzdwiixmjm0nty3odkwiiwibmftzsi 6ikpvag4grg 9 liiwiawfo ijoxnte 2MJM5MDIYFQ。sflkxwrjsmekkf 2 qt4 fwpmejf 36 pok6yjv _ ADQS SW5CJWT工作机制?
在身份验证中,当用户使用其凭据成功登录时,将返回JSON网络令牌(即JWT)。由于令牌是证书,因此必须非常小心以防止安全问题。通常,令牌的保存时间不应超过要求。理论上,超时越短越好。
每当用户想要访问受保护的路由或资源时,用户代理应该使用承载模式发送JWT,通常在a
版权声明:详细说明使用JWT实现单点登录(完整跨域方案)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















