服务安全之:JWT

   JWT是JSON Web Tokens的缩写。既然叫JSON Web Tokens,因此JWT Tokens中真正包含的是多个JSON对象。为何是多个JSON对象呢?由于SWT Token其实是由三部分组成,其中有两部分是JSON格式。这三部分即头(Header)、负载数据(Payload)、签名(Signature)。html

    

    一、信息头(Header)算法

    头信息包含两部分,一部分表示Token的类型,对于JWT来讲,值为JWT;另外一部分表示签名算法,如,HMAC、SHA25六、RSA。示例以下:安全

    

 

    二、负载信息(Payload)服务器

    负载信息是对实体与附加信息的说明。包含注册声明、公开声明、私有声明三部分。详情请参考:https://tools.ietf.org/html/rfc7519#section-4.2编码

 

    三、签名(Signature)3d

    经过指定的算法将头、负载、密码信息做为输入条件,计算而得的一个字符串。code

 

    这三部分信息不是原文传输的。在传输之前,先要进行转码压缩。这样作一是为了使传输的token数据体积小,减小数据传输的负担,二是为了使数据更安全。JWT Token通常能够采用HMAC算法使用密码进行转码压缩,或采用RSA或ECDSA使用公钥/私钥对进行转码。这两种算法均具备数字签名的做用,从而可以保证数据的完整性,防止数据被第三方篡改。jwt

    

    JSON格式的头信息和负载信息通常先要进行Base64编码转化。而后经过如下的算法得到签名:htm

    

 

    假定头信息Base64编码转化后的字符用h表示,Base64编码转化后的负载数据信息用p表示,签名值用s表示,则JWT Token显示为一串用逗号分隔的字符串,通常有以下的形式:对象

    

hhhhh.ppppp.sssss

   

    JWT最经常使用的应用场景是为用户受权。用户在登陆时,从受权服务器拿到JWT Token,后续的用户请求只要携带此Token请求相应的资源或服务便可。服务端会在拿到用户传的Token后,进行合法性验证。

 

    JWT另外一个用途就是进行信息交换。因为JWT Token既能够用于承载数据,又是通过签名的,因此,既能够包含更多的应用相关信息,又能够保证数据的安全性,防止数据被拦截后修改。

 

    更详细的介绍,请参考官方说明:https://jwt.io/introduction/

相关文章
相关标签/搜索