JWT的数字签名的简单理解

一、JWT概念

        json web token

二、JWT与原始token的区别

      JWT是对原始security的oauth2 token的增强。

      原始的token只是一个uuid,没有任何意义。

      JWT包含了部分业务信息,减少了token验证等交互操作,效率更高。

三、JWT的特点

  • 自包含:包含有意义的信息。但由于其信息能被公开看到,所以jwt并不能放特别敏感的业务信息。
  • 含有签名:防止jwt自身被修改
  • 可扩展:可自定信息

三、JWT的签名

      JWT是如何做到防止内容被篡改? 答案就是数字签名。

      JWT内容是由三部分组成:Header、PayLoad、Signature。

              Header里存的是:token类型和加密算法,此处的加密算法是签名的加密算法

              PayLoad里面存的是:具体的业务数据比如用户id等等

              Signature:具体的数字签名密文信息

 

 

     举个例子,jwt内容如下:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImp0aSI6IjMyMWU1MzlmLTJmY2MtNDcwNy05YWMyLTI1ZmY5MTkzZTI4ZiIsImlhdCI6MTU3MTc5ODgwNiwiZXhwIjoxNTcxODAyNDA2fQ.3pNLP8HvSu5hKFATOeJIR1Tpo5hxDB4Pcz6mK1lsTFU

    其内容由三个“.”隔开,由base64编码,分别对应的就是header、payload、signature。

    通常我们使用jwt时候采用RS256 私钥/公钥 方式进行签名的 加密/解密,因为RS256是非对称加密,比较安全。

    因为jwt是由服务端生成并发放的,其中签名是由服务端的私钥加密而成的,只要保证了私钥的安全,就能保证签名是安全的。

    当别人拿着jwt访问我们的服务时,可以有两种验证方式:

          (1)我们服务端拿到header和payload的信息,通过header里的加密算法拿着我们自己的私钥对payload生成一个签名对比jwt传过来的签名,如果签名一致,说明payload的信息没有被修改。

          (2)我们利用公钥对签名解密,解密出来的header和payload的信息是否和传过来的一致。

 

-------------------------------------------------------------------------------------------------------------------------------

以上为我的理解,以后接着补充,如有错误,欢迎指正。

你可能感兴趣的:(security,JWT,Token,签名)