很多时候我们的网站或者我们的系统需要身份验证和登录功能来保护用户隐私,区分不同的用户,这个时候可能有很多方法,其中JWT可能是你用来做这个功能最好的方法之一,JWT是json web token的缩写。
JWT是什么呢,想象你登录的时候需要你输入用户名密码,随即产生一串的token用来标识你这个用户,然后将token存储在cookie或者session中,之后你和网站交互都用这个token来识别你的登录状态和身份,当然token是可以在一定时间之后过期的。
JWT是一个通过用户信息生成token的三方包或者说库,亦或者说是技术,有很多语言都有JWT的实现版本和三方包。JWT使得你通过用户信息生成token的方式更为简洁,你不需要关心其中需要的加密算法,无论是对称加密还是非对称加密,你只需要把用户信息准备好,通过JWT来生成token即可。这里我们用NodeJs来做展示。
前面已经说过了,JWT可以存储用户的信息,可以存储任何你想存储的信息,比如user_id,email等等,这里我们用user_id做展示,一般情况下user_id也够用了,当你登录到网站之后,JWT生成合法的token,一般情况下你会把它存到客户端,web端是cookie,这样每次请求客户端会携带这个token,如果token不合法或者不存在,就证明这次请求是一个非法请求,我们不能给这个请求返回正常的数据,需要把用户踢出。
接下来我们用代码做一下简单的讲解,
const jwt=require('jsonwebtoken')
const user={id:'0123',name:'max',email:'max@gmail.com',password:'7235723867'}
const token=jwt.sign({id:user.id},'secretKey')
console.log('JWT Token: '+token)
const verifiedToken=jwt.verify(token,'secretKey')
console.log('User ID: '+verifiedToken.id)
代码十分简单,我想你应该能很容易看懂,jwt.sign就是通过user_id和secretkey生成了token,这是一个对称加密算法,你可以通过secretkey来做token和用户信息的加密解密,分别对应的方法就是jwt.sign和jwt.verify,至于具体的用哪一个对称加密算法,你也可以通过参数来设置,不过不同的语言实现版本支持算法的种类略有区别,细节就不多说了,想去了解可以前往JWT的官网深入研究,对于大部分用户了解这些就够了。对于大部分应用我们最好传入一个过期时间,让token在一定时间之后失效,如果一个token终生有效,那是很不安全的。
生成token之后我们有很多方式进行存储,前面已经提到了,不过目前web领域流行的方式是通过cookie进行单点登录(SSO)。
JWT让我们在生成token的时候更为容易,不需要自己去研究加密解密算法和方式,而且JWT提供很多语言的库,让你在异构的网络中也十分容易的从cookie中解密出另一个服务写入的token,给我们搭建web服务在实现用户登录方面提供了十分强大便捷的功能。
欢迎关注我的blog: ShareTech
网友评论