JSON Web Token(JWT)入门

2020-04-14  本文已影响0人  又语

本文是对 JSON Web Token(JWT)原理和用法的基本介绍。


目录


简介

JSON Web Token(JWT) 是基于 Token 技术的一种标准,是目前流行的跨域认证解决方案。


原理

服务端认证通过后生成一个 JSON 对象返回给客户端,后续客户端向服务端发起请求时都必须带上这个 JSON 对象,服务器只通过这个 JSON 对象便可确认客户端的身份。为了防止 Token 被篡改,服务端在生成 Token 时会加上签名。服务端不再保存任何 Session 数据,从而使得服务端实现了无状态,比较容易实现水平扩展。


数据结构

JWT 最终形态为一个长字符串,由三部分组成,以 . 分隔:Header.Payload.Signature

Header

Header(头部)是一个 JSON 对象,描述 JWT 的元数据。

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

Payload(负载)也是一个 JSON 对象,用于存放实际需要传递的数据。
JWT 规定了 7 个官方字段:

{
   "username": "admin"
}

注意:JWT 默认是不加密的,所以不要将敏感信息放在 Payload 中。
以上 JSON 对象也要使用 BASE64URL 算法编码成字符串。

Signature

Signature 是对 Header 和 Payload 的签名,防止被篡改。
首先需要一个只有服务端才知道的密钥,然后使用 Header 中指定的签名算法按照以下公式生成签名:

algorithm(base64url.encode(Header) + "." + base64url.encode(Payload), 密钥)

算出签名后,将 Header、Payload 和 Signature 三部分合并成一个字符串,每部分用 . 分隔后得到最终的 Token 返回给用户。


使用方式

服务端生成 JWT Token 后不存储直接返回给客户端,客户端收到后存储在 Cookie 或 LocalStorage 中,后续每个请求中都要带上这个 Token。
建议不要将 Token 放在 Cookie 中,不能解决跨域问题,建议放在 HTTP Header 的 Authorization 字段。


特点


附录

参考:阮一峰 JSON Web Token 入门教程

上一篇下一篇

猜你喜欢

热点阅读