安全认证之JWT令牌

一、使用JWT的思路

1.1、使用JWT的思路

用户认证通过会得到一个JWT令牌,JWT令牌中已经包括了用户相关的信息,客户端只需要携带
JWT访问资源服务,资源服务根据事先约定的算法自行完成令牌校验,无需每次都请求认证服务完成授权。

1.2、JWT简介

JSON Web Tokens are an open, industry standard  method for representing claims securely between two parties。JWT.IO allows you to decode, verify and generate JWT。JSON Web令牌是一种开放的行业标准方法,用于在双方之间安全的表示声明。JWT.IO允许你节码,验证和生成JWT。

JWT它定义了一种简介的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公钥/私钥对来签名,防止被篡改。

官网:https://jwt.io/

详细简介:https://jwt.io/introduction/

1.3、JWT令牌的优缺点

优点:

  • Jwt基于json,非常方便解析
  • 可以在令牌中自定义丰富的内容,易扩展
  • 通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高
  • 资源服务使用JWT可不依赖认证服务即可完成授权

缺点:

  • JWT令牌较长,占存储空间比较大

1.4、令牌结构

 1.5、令牌如何工作

 二、JWT入门

2.1、生成公钥和私钥

JWT令牌生成采用非对称加密算法

1、生成密钥证书

//采用RSA算法生成证书包含公钥和私钥
keytool -genkeypair -alias waggagkey -keyalg RSA -keypass waggag -keystore waggag.keystore -storepass waggagkeystore

Keytool 是一个java提供的证书管理工具

  • alias:          密钥的别名
  • keyalg:       使用的hash算法
  • keypass:    密钥的访问密码
  • keystore:    密钥库文件名,xc.keystore保存了生成的证书
  • storepass:  密钥库的访问密码

2、查询证书信息

//查询证书信息
keytool -list -keystore waggag.keystore

3、删除别名

//删除别名
keytool -delete -alias waggagkey -keystore waggag.keystore

注意:密钥删除并不能删除文件

2.2、导出公钥

安装OpenSSL: http://slproweb.com/products.html

配置OpenSSL的PATH环境变量

//使用OpenSSL生成密钥
keytools -list -rfc --keystore waggag.keystore | openssl x509 -inform pem -pubkey

 下面一段就是公钥内容

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn7/6W8BXEtfOr1GfNbue
lFC91NoBuO/j7I5Mnsr81d6M+s2AnOCxxX68+q9MI2Q5ZhBOueRxRuiE4lmbQij6
36MzIWGUybc7xSM6B5lk5CpuxzupffUTLVll2tjb4/8nXMlLHqAia3IM0ZdmvB09
JFHDomWjQycAYWVtsMedOW7eXaBVVqYIkLAPwnBk7npBQhjFBJ1c/d5YkwsM5WP5
+yt+I16T3bbadCAyC38rFlJZfoIgSPSvnadAuyH7JULwiSAZgMXYpqxBq00yppcw
KdNfE2e+Ncci7PlhXniUJ5D0HKqQCR+gpTS8roBve8HiTqQ9aD0hGeqlaFM6XKTM
tQIDAQAB
-----END PUBLIC KEY-----

 

posted @ 2019-09-23 22:00  王港  阅读(525)  评论(0)    收藏  举报