JSON Web Token 认证原理

Photo by  Andrew Ly on  Unsplash

JSON Web Token(下面简称 JWT )常被用来作为认证凭据存储在浏览器本地。通过本文,我想阐述清楚 JWT 认证的实现过程和背后的原理。

JWT 中 header(头部信息)和 payload(载荷信息)使用 Base64URL 进行编码。和 Base64 编码一样,Base64URL 本身是一种编码算法,而不是加密算法,因此编码后的 header 和 payload 仍不能携带密码等敏感信息。照这样说来,JWT 本部应当用于用户认证,但 JWT 携带的签名信息给了前后端认证新的可能。

普通签名算法

对于一般的签名(摘要)算法来说,由于没有引入密钥信息,任何人只要知道了用户的账号(一般把账户放在 payload 中用于后端认证)和 JWT payload 格式,就能伪造出一个 JWT 凭证通过服务器验证。

加密签名算法

为了在签名中加入独一无二的认证信息,防止伪造,就要使用包含加密签名算法——如 HS256。给 HS256 传入一个密钥( secret 又叫 salt ),就可以生成一个加密签名。 服务器只要确保黑客无法取得该密钥,就可以保证此签名是独一无二的 。

认证流程

在一次账号密码认证之后,服务器使用 HS256 对 header 和 payload(携带用户账号名称)生成一个加密签名,置于 JWT 后发送给客户端,作为其下次认证的凭证。

客户端发送的请求都自动携带 JWT 进行认证发送给服务器。服务端首先利用 HS256 和密钥,对 JWT 中 header 和 payload 做一次签名。由于密钥引入,HS256 生成的签名也是独一无二的。因此只要验证此签名与 JWT 中的签名一致,服务器就可以认定这个凭证有效。之后服务器通过取出 payload 中的用户账号,与数据库进行关联,就可以获取到用户的其他信息,从而进行后续的个性化展示或 API 调用等操作。

相关阅读

Base64 编码

参考链接

JSON Web Token 入门教程

JWT: The Complete Guide to JSON Web Tokens

0
0

所有评论 0