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)