Menu

优化单点登录流程的好东西:JWT 介绍

2018年3月15日 - Java Web 开发, SSO

JWT 概念

JSON Web Token (JWT)是一种开放标准(RFC 7519)(译者注:该RFC标准比较通俗易懂,建议进一步阅读),其中定义了一种紧凑 (compact) 且自包含(self-contained)(译者注:指的是在payload里包含更多的信息)的方式用于以JSON对象的形式在多方之间传递信息。信息可以被核实和信任,因为它经过了数字签名。JWT既可以使用密钥(采用HMAC(Hash-based Message Authentication Code)算法),也可以使用公私钥(采用RSA算法)进行签名。

JWT 效果演示

eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzcyI6ICJodHRw
Oi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiw
KICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIi
wKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAKfQ.ggW8hZ
1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6qJp6IcmD3HP9
9Obi1PRs-cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJNqeGpe-gccM
g4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7TpdQyHE5lcMiKP
XfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoSK5hoDalrcvR
YLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4XUVrWOLrLl0
nx7RkKU8NXNHq-rvKMzqg
fetch('api/user/1', {
  headers: {
    'Authorization': 'Bearer ' + token值
  }
})

主要组件

{
  'typ': 'JWT',
  'alg': 'HS256'
}
data = base64Encode(header内容) + "." + base64Encode(payload内容);
signature = Hash(data,secret);
signature = base64Encode(signature);

JWT 在线工具

Java 工具包

JWT 应用细节注意(感谢茶饮兄交流)

JWT 有效时长控制

JWT 吊销 token

动态密钥替换

Spring boot Demo

资料