个人网页制作毕业论文/官网排名优化方案
JWT和SPRING SECURITY OAUTH2
JWT简介
JSON Web Token:是一种开放标准(RFC 7519),定义了一种紧凑且自包含的标准,该标准旨在将各个主体的信息包装为JSON对象。主题信息是通过数字签名进行加密和验证的。常使用HMAC算法或RSA(公钥/私钥的非对称加密)算法对JWT进行签名
JWT特点
- 紧凑型:JWT使用加密后的字符串,数据体积非常小,传输速度快;
- 自包含:JWT包含了主体的所有信息,避免每个请求都需要向认证服务器验证身份,降低服务器的负载。
JWT结构
头部Header:令牌类型和使用的算法类型,将Header使用Base64编码作为JWT的第一部分
有效负载Payload:包含用户的一些信息和Claim(声明、权利)。有三种类型的Claim:保留、公开、私人。将Payload进行Base64编码作为JWT的第二部分
签名Signature:要创建签名的部分,需要将Base64编码后的Header、Payload和密钥进行签名,格式:
HMACSHA256(base64UrlEncode(header)+”.”+base64UrlEncode(payload),secret)
JWT使用场景
- 认证:用户登录后,后续的每个请求将携带该JWT。该JWT包含用户信息、权限点等信息,根据JWT包含的信息,资源服务器可以控制JWT可以访问的资源范围。单点登录是一个常用的场景。
- 信息交换:JWT是在各个方直接安全传输信息的一种方式,JWT使用签名加密,安全性很高。而且当使用Header和Payload计算签名时,还可以验证签名内容是否被篡改
通过Java的Keytool生成jks文件
命令行输入生成jks文件作为私钥
keytool -genkeypair -alias fzp-jwt -validity 3650 -keyalg RSA -dname "CN=jwt,OU=jtw,O=jtw,L=zurich,S=zurich,C=CH" -keypass fzp123 -keystore fzp-jwt.jks -storepass fzp123 |
通过命令获取jks公钥
keytool -list -rfc --keystore fzp-jwt.jks|openssl x509 -inform pem -pubkey |
书中给出的项目
书中给出的项目主要有三个服务,一个注册中心,一个用户服务,一个鉴权服务。
调用流程如下:
- 用户服务请求鉴权服务携带客户端信息和用户信息;
- 鉴权服务验证用户服务的信息是否正确,正确则生成JWT并使用RSA(非对称加密),然后返回给客户服务;
- 用户服务获取到JWT后,使用公钥解密,获取到用户的权限信息,判断用户是否有权限访问。
- 当用户的权限校验通过后,用户服务返回记录用户的信息的JWT
用户服务的关键配置:
权限服务的关键配置:
接口调用示例:
用户服务通过获取授权接口,访问权限服务
权限服务通过TokenEndPoint类提供接口
用户服务获取到对应的授权信息后返回
截取信息中的access_token作为令牌,访问其他接口
来自《深入理解Spring Cloud与微服务构建》