1.JWT
1.1 什么是JWT?
JSON Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,用于将信息作为 JSON 对象在各方之间安全地传输。此信息可以进行验证和信任,因为它是经过数字签名的。JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥/私钥对进行签名。
1.2 何时应使用 JSON Web 令牌?
Authorization(授权):这是使用 JWT 的最常见方案。用户登录后,每个后续请求都将包含 JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是当今广泛使用 JWT 的一项功能,因为它的开销很小,并且能够跨不同域轻松使用。
Information Exchange(信息交换)
1.3 什么是JSON Web令牌结构
在其紧凑的形式中,JSON Web令牌由三个部分组成,由点()分隔,它们是:.
- 页眉
- 有效载荷
- 签名
因此,JWT 通常如下所示。
xxxxx.yyyyy.zzzzz
让我们分解不同的部分。
页眉
标头通常由两部分组成:令牌的类型(即 JWT)和正在使用的签名算法(如 HMAC SHA256 或 RSA)。
例如:
{
"alg": "HS256",
"typ": "JWT"
}
然后,这个 JSON 是 Base64Url 编码,以形成 JWT 的第一部分。
有效载荷
令牌的第二部分是有效负载,其中包含声明。声明是关于实体(通常是用户)和其他数据的语句。有三种类型的声明:注册声明、公共声明和私人声明。
-
注册声明:这些是一组预定义的声明,这些声明不是必需的,但建议提供一组有用的、可互操作的声明。其中一些是:iss(发行人),exp(到期时间),子(主题),aud(受众)等。
请注意,声明名称的长度只有三个字符,因为 JWT 应该是紧凑的。
-
公共声明:这些可以由使用JWT的人随意定义。但为避免冲突,应在 IANA JSON Web 令牌注册表中定义它们,或将其定义为包含抗冲突命名空间的 URI。
-
私人声明:这些是为在同意使用它们的各方之间共享信息而创建的自定义声明,既不是注册声明也不是公开声明。
示例有效负载可以是:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
然后对有效负载进行 Base64Url 编码,以形成 JSON Web 令牌的第二部分。
请注意,对于已签名的令牌,此信息虽然受到保护以防止篡改,但任何人都可以读取。不要将机密信息放在 JWT 的有效负载或标头元素中,除非它已加密。
签名
要创建签名部分,您必须获取编码的标头、编码的有效负载、机密、标头中指定的算法,并对其进行签名。
例如,如果要使用 HMAC SHA256 算法,将按以下方式创建签名:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
签名用于验证消息在此过程中未发生更改,并且,对于使用私钥签名的令牌,它还可以验证 JWT 的发送者是否是它所说的发件人。
将所有内容放在一起
输出是三个 Base64-URL 字符串,由点分隔,可以在 HTML 和 HTTP 环境中轻松传递,同时与基于 XML 的标准(如 SAML)相比更紧凑。
下面显示了一个 JWT,它具有编码的先前标头和有效负载,并使用密钥对其进行签名。

如果要使用 JWT 并将这些概念付诸实践,可以使用 jwt.io 调试器来解码、验证和生成 JWT。
2.token
所谓的Token,其实就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码成功进行登录后,服务器便生成一个Token及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码

3.MD5
3.1 概述
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
本文详细介绍了JSONWebToken(JWT)的概念,包括其结构、用途(如授权和信息交换)、如何创建和验证。重点讨论了JWT的紧凑结构,以及为何在授权场景中流行,尤其是单点登录。同时提到了MD5算法的历史背景和安全局限性。
44万+

被折叠的 条评论
为什么被折叠?



