一、使用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/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-----