JWT

什么是JWT

Json Web Token, 简称 JWT。

JWT 顾名思义,它是 JSON 结构的 token,由三部分组成:

header

payload

signature

header

header 用于描述元信息,例如产生 signature 的算法:

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

其中 alg 关键字就指定了使用哪一种哈希算法来创建 signature

payload

payload 用于携带你希望向服务端传递的信息。你既可以往里添加官方字段(这里的“字段” (field) 也可以被称作“声明” claims),例如 iss (Issuer), sub (Subject), exp (Expiration time),也可以塞入自定义的字段,比如 userId :

{"userId":"b08f86af-35da-48f2-8fab-cef3904660bd"}

signature 译为「签名」

创建签名要分以下几个步骤:

你需要从接口服务端拿到密钥,假设为 secret

将 header 进行 base64 编码,假设结果为 headerStr

将 payload 进行 base64 编码,假设结果为 payloadStr

将 headerStr 和 payloadStr 用 . 字符串拼装起来成为字符 data

以 data 和 secret 作为参数,使用哈希算法计算出签名

如果上述描述还不直观,用伪代码表示就是:

// signature algorithm

data = base64urlEncode( header ) + “.” + base64urlEncode( payload )signature = Hash( data, secret );假设我们的原始JSON结构是这样的:

// Header

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

// Payload:

{"userId":"b08f86af-35da-48f2-8fab-cef3904660bd"}

如果密钥是字符串 secret 的话,那么最终 JWT 的结果就是这样的

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y

由此可见

JWT 的目的不是为了隐藏或者保密数据,而是为了确保数据确实来自被授权的人创建的(不被篡改)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JWT 介绍 (https://jwt.io/) JSON Web Token(JWT)是一个开放标准(RFC 7...
    匆匆岁月阅读 10,917评论 1 41
  • JWT简介 JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑和自包含的方...
    BraveHeartLi阅读 14,643评论 1 29
  • 现在,JSON Web Tokens (JWT) 是非常流行的。尤其是 Web 开发领域。 流行 安全 稳定 易用...
    小波同学阅读 118,684评论 8 83
  • 概述 JWT 基于 token 的鉴权机制,基于 token 的鉴权机制类似于 http 协议也是无状态的,它不需...
    聪明的奇瑞阅读 5,068评论 0 2
  • 前言 随着APP不断的开发迭代,安装包也会变得越来越大。冗余的东西总会让人觉得不舒服,对于代码用洁癖的开发者,肯定...
    朴下柔阅读 2,166评论 0 1