美文网首页
JSON Web Token(JWT)入门

JSON Web Token(JWT)入门

作者: 又语 | 来源:发表于2020-04-14 16:00 被阅读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"
}
  • alg:签名算法(algorithm)默认采用 HMAC SHA256(HS256)
  • typ:Token 类型,JWT Token 类型统一为 JWT
    最后将以上 JSON 对象使用 BASE64URL 算法编码成字符串。
Payload

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

  • iss:issuer,签发人
  • exp:expiration time,过期时间
  • sub:subject,主题
  • aud:audience,受众
  • nbf:Not Before,生效时间
  • iat:Issued At,签发时间
  • jti:JWT ID,编号
    除官方字段外,可以自定义私有字段,如:
{
   "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 字段。


特点

  • JWT 默认不加密,也可以在 Token 生成后加密,不加密时不能放入敏感数据;
  • JWT 最主要用途是用于身份认证,但也可以用于信息交换;
  • JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该 Token 的所有权限。为了减少此风险,JWT 的有效期应该设置得比较短(考虑区分 access_token 和 refresh_token)。对于一些比较重要的权限,使用时应该再次对用户进行认证。

附录

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

相关文章

  • 浅析JWT

    1.JWT(JSON Web Token) JSON Web Token (缩写JWT) 是目前最流行的跨域认证解...

  • 身份验证之JWT

    什么是(JWT)JSON Web Token ? 官网介绍JSON Web Token(JWT)是一个开放标准(R...

  • JSON Web Token

    JSON Web Token (JWT)是一种基于 token 的认证方案。 JSON Web Token 的结构...

  • Laravel 5.2 JWT多用户认证

    Json Web Token JWT代表Json Web Token.JWT能有效地进行身份验证并连接前后端。 降...

  • Spring Boot使用JWT和自定义注解完成用户登录认证和权

    0x00 JWT(JSON Web Token) JWT的全称是JSON Web Token,它是一种紧凑的、UR...

  • JWT简介

    JSON Web Token (JWT) 参考资料:Introduction to JSON Web Tokens...

  • JSON Web Token

    What is JSON Web Token? JSON Web Token (JWT)是一个开放标准(RFC 7...

  • JWT token认证

    本文主要讲述两方面的内容1JSON Web Token(JWT)的介绍说明2 JSON Web Token(JWT...

  • jwt教程

    未完待续 JWT是什么? JWT是JSON Web Token的缩写,即JSON Web令牌。 JWT规范 中对其...

  • JWT 概述与代码实现

    一、什么是JSON Web Token? JSON Web Token(JWT)是一个开放标准(RFC7519),...

网友评论

      本文标题:JSON Web Token(JWT)入门

      本文链接:https://www.haomeiwen.com/subject/nohtvhtx.html