文档章节

JWT必知必会

h
 hwh4
发布于 2017/02/04 12:35
字数 924
阅读 58
收藏 3

最近,项目的安全认证机制全面采用JWT。现在,趁整个工作基本告一段落之际,将一些知识点总结一下发布出来。

为什么要迁移?

原因很简单,就以下几点:

  • 为了迁移到微服务架构,由于服务分拆之后,单一的登录入口点消失了,采用Token是必然之选。
  • 为了伸缩性考虑,采用Cookie + Session机制,必然面临着应用状态的问题,而且必然牵涉到session的复制。采用Token,天然避免这一点。这里并非是指完全无Session化,但起码可以降至最少。
  • 为了移动端考虑,Token更适合移动端,比Cookie更灵活了。
  • 为了安全性考虑,Token机制【仅验证request header时】天然对CSRF免疫。

JWT为何物?

JWT由三部分组成:header + payload + signature,每部分是一个Json表示。最终的Token对这三部分进行编码之后的字符串,中间用“.”分割:

token = encodeBase64(header) + '.' + encodeBase64(payload) + '.' + encodeBase64(signature) # token is now: 
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

在应用与服务器之间传递的就是上述字符串形式的Token。

如何使用JWT?

使用JWT的应用基本都遵循下面的使用流程:

  1. 访问登录点。
  2. 登录服务验证之后,签发证书返回给客户端。
  3. 客户端保存证书,并在每次请求时将其附在request header中,表示已经登录。
  4. 服务器接收请求之后,通过签名和时戳,验证Token的有效性。
  5. 若有效,则响应客户端。

对应的request header如下:

Authorization:Bearer <token>

整个过程如下图:

在一般的应用中,验证成功之后,服务器可能会在Cookie或Session中保留一些用户相关的额外信息,简化后续的编程,同时避免反复读取数据库。

在JWT,同样可以实现这样的功能:只需将相应的内容放入payload即可。这样,下次从客户端发送的token中便可以解码得出。

验证JWT的有效性时,会考虑至少下面两点:

  1. 签名是否正确?
  2. Token是否到期?

整个过程的编码其实并不复杂,请参见文后的链接,这里不再啰嗦。

使用中的注意事项

出于安全性,注意以下几点:

  • 签名证书需要安全存放
  • 不要将敏感信息放置于token中
  • 请结合SSL使用
  • 如果要在Cookie中保存Token【此时,服务器要同时验证cookie或header中是否有token】
    • 留意Token的大小超过Cookie的限制
    • 请使用HttpOnly标志。若有可能,使用Secure标志。
    • 采用Synchronize Token来防止CSRF【这是因为,在A站点上发起向B站点的请求时,B站点的Cookie同样会被发送给B。若不使用另一个Token来防护,则无法得知cookie中的JWT是否属于从A->B,还是从B->B。目前,大部分现有的框架已经支持】。
  • 为了防止replay attack,可加上jti、exp和iat声明

以上是对JWT的旋风式说明,其他的内容,请参见参考文献。

参考文献

本文转载自:http://www.jianshu.com/p/7cea1b212183

h
粉丝 0
博文 2
码字总数 0
作品 0
西安
程序员
私信 提问
[翻译]五步理解JSON Web Token(JWT)

五步理解JSON Web Token(JWT) 原文链接5 Easy Steps to Understanding JSON Web Tokens (JWT) 在这篇文章中我们讲会讲到: JSON Web Token(JWT)的基本原理是什么, 以及我们为什么要使用它?...

广州芦苇科技web前端
08/09
0
0
用JWT技术解决IM系统Socket长连接的身份认证痛点

1、引言 随着瓜子二手车相关业务的发展,公司有多个业务线都接入了IM系统,IM系统中的Socket长连接的安全问题变得越来越重要。本次分享正是基于此次解决Socket长连接身份安全认证的实践总结而...

首席大胸器
2018/11/28
378
0
深入了解Json Web Token之概念篇

  以下,可能你能够在各大网站上搜到,但是对于JWE 的内容,却鲜有见闻。下文是我读了json web token handle book后,用自己的理解写下的,如有疑问,欢迎评论。主要参考文本JWT Hand Book...

FreeBuf
2018/08/17
0
0
用JWT技术解决IM系统Socket长连接的身份认证痛点

本文引用了封宇《JWT技术解决IM系统的认证痛点》一文的部分内容,即时通讯网重新整理、增补和修订,感谢原作者的无私分享。 1、引言 随着瓜子二手车相关业务的发展,公司有多个业务线都接入了...

JackJiang2011
2018/11/28
0
0
[译]5个简单的步骤去理解 JSON Web Tokens(JWT)

原文作者:Mikey Stecky-Efantis 原文地址:5 Easy Steps to Understanding JSON Web Tokens(JWT) 译者:命名最头疼 在本文中, 将解释JSON Web Tokens(JWT)的基本原理以及使用他们的原因。...

命名最头痛
02/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

新建作业20191011121223

2.编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound,Sally shouted,"By the Great Pumpkin,what was that!" #include<stdio.h>int main(){printf("\a");......

电子197朱妍
31分钟前
3
0
家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
52分钟前
7
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
53分钟前
7
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
55分钟前
10
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
59分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部