上文《3种web会话管理的方式》介绍了3种会话管理的方式,其中token-based的方式有必要从实现层面了解一下。本文主要介绍这方面的内容。上文提到token-based的实现目前有一个开放的标准可用,这个标准就是JWT,从它的官网上也能看到,目前实现了JWT的技术非常多,基本上涵盖了所有的语言平台。本文选择expressjsonwebtoken基于nodejs来实现token-based会话管理。

相关代码:https://github.com/liuyunzhuge/blog/tree/master/node_jwt

demo的说明我会在本文第二部分介绍,下面先介绍一下JWT的相关知识。

认识JWT

JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑和自包含的方式,用于在各方之间作为JSON对象安全地传输信息。作为标准,它没有提供技术实现,但是大部分的语言平台都有按照它规定的内容提供了自己的技术实现,所以实际在用的时候,只要根据自己当前项目的技术平台,到官网上选用合适的实现库即可。

使用JWT来传输数据,实际上传输的是一个字符串,这个字符串就是所谓的json web token字符串。所以广义上,JWT是一个标准的名称;狭义上,JWT指的就是用来传递的那个token字符串。这个串有两个特点: 
1)紧凑:指的是这个串很小,能通过url 参数,http 请求提交的数据以及http header的方式来传递; 
2)自包含:这个串可以包含很多信息,比如用户的id、角色等,别人拿到这个串,就能拿到这些关键的业务信息,从而避免再通过数据库查询等方式才能得到它们。

通常一个JWT是长这个样子的(这个串本来是不会换行的,为了让这个串看起来的样子跟后面要介绍的数据结构对应起来才手工加的换行):

image 

网友评论