OAuth(开放授权) 是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容,OAuth2.0 是 OAuth 协议的延续版本。
引用:
OAuth2.0 的模块分为几部分:
例如:使用微信登录商城
使用 Spring security + Oauth2.0 实现用户认证和用户授权。 Spring security 是一个强大的和高度可定制的身份验证和访问控制框架,其继承了 Oauth2.0 协议。
由于传统的授权模式性能低下,每次都需要请求授权服务器校验令牌合法性,则会造成多于的请求,且拖慢响应速度。故使用非对称算法,利用公钥私钥完成对令牌的加密。
若加密成功,则表示令牌合法。若校验失败,则令牌无效不合法。
旧框架:
新框架: 本地令牌验证
特点:公钥和私钥是成对的,它们互相解密
加解密: 公钥加密,私钥解密
签名:私钥签名,公钥验签
转载:RSA公钥,私钥和数字签名简单理解
生成秘钥证书
秘钥证书中包含公钥和私钥
创建一个文件夹,并执行如下命令
keytool -genkeypair -alias tom -keyalg RSA -keypass tomtom -keystore tom.jks -storepass tomtom
Keytool 是一个 java 的证书管理工具
-alias:密钥的别名
-keyalg:使用的 hash 算法
-keypass:密钥的访问密码,能够读出证书
-keystore:密钥库文名
-storepass:密钥库的访问密码,能够解密数据
相关操作命令
# 查看证书信息
keytool -list -keystore tom.jks# 删除别名
keytool -delete -alias tom -keystore tom.jks
可以使用 openssl 来导出公钥信息
下载地址:
.html
网盘下载:
链接: 提取码:ir26
配置环境变量:
OPENSSL_CONF
D:CommonOpenSSL-Win64binopenssl.cfg
在 Path 中增加:
D:CommonOpenSSL-Win64bin
导出公钥
keytool -list -rfc --keystore tomtom.jks | openssl x509 -inform pem -pubkey
保存公钥到文件中,公钥必须整理成同一行
修改配置文件:
import com.alibaba.fastjson.JSON;
import org.junit.Test;
import io.ClassPathResource;
import org.springframework.security.jwt.Jwt;
import org.springframework.security.jwt.JwtHelper;
import org.springframework.pto.sign.RsaSigner;
import org.springframework.pto.sign.RsaVerifier;
import org.springframework.pto.KeyStoreKeyFactory;import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.interfaces.RSAPrivateKey;
import java.util.HashMap;
import java.util.Map;public class CreateJWTTestDemo {@Testpublic void testCreateToken() {// 加载证书ClassPathResource resource = new ClassPathResource("tomtom.jks");// 读取证书数据KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(resource, "tomtom".toCharArray());// 获取证书中的一对秘钥KeyPair keyPair = KeyPair("tomtom", "tomtom".toCharArray());// 获取私钥RSAPrivateKey privateKey = (RSAPrivateKey) Private();// 创建令牌,使用私钥加盐[RSA]Map<String, Object> payload = new HashMap<String, Object>();payload.put("nickname", "tomcat");payload.put("address", "xiamen");payload.put("role", "admin, user");Jwt jwt = JSONString(payload), new RsaSigner(privateKey));// 获取令牌数据String token = Encoded();System.out.println(token);}@Testpublic void testParseToken() {String token = JhZGRyZXNzIjoieGlhbWVuIiwicm9sZSI6ImFkbWluLCB1c2VyIiwibmlja25hbWUiOiJ0b21jYXQifQ.A0QrW0_Kk66G4fMdbFKPwJdsWmkwXJ4-8pymoJe28KGfuWtjOJKLZxdzjPuw9wItjoxTNHMWDCrLOxLCVuKbShIxpJDsmWecrmSjR6a8ZqBXqtw3-V_C-AYqJlyxHy7rfzCZzZDQ8GvyY7u4cFcx-iv42g9yVOLDc2DpnzvQ9uoLNYrqQuhagmEUtqrgHMX5OBYM1OP11VEjURVRt2tCOHX2Q285rkN-bgFgXtyscBkjjf5IGbiDXi6sofLTi_Ei2lEftvbhLNAi1LEQitCaZlqkh_ZsQ4d2RtJmP_vkRKCBHRhe0PNChIg0KI5TJ8fDeHgMfsEahcKbNfDdujfRzA";String publicKey = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmI1RoiNIK6nP+GrlCTPSSR1ResUCDLHQ5o6kyA9wyqYj/8S8Xgjyp9AKf8e0AB+Yid0mjtVHQyt3PSXPPSAvypeKvGWyVaCuLEmUtE1FX2VcvPqdmEiGBhtF1cwGh+9DAGxp0tNUjbsVaS3A3QxR5MLWTbMJZFGlD2xhKjGc8qju/3UHKgbH1SDZKBJRk+Wdv7AWO5nf9sH2KDBo4Vm2HMwhfoPrrslIEBNfcaRqD317n5szvtDGd6zMSYA9ENOQ8dx1Yf2bve/B2jTQVdtO+v3uhKn2AAOChvVmjpdvVxXFWDmEBy+nUpMswMjheizlo0AWs8BqXdns9geY1E6icQIDAQAB-----END PUBLIC KEY-----";Jwt jwt = JwtHelper.decodeAndVerify(token,new RsaVerifier(publicKey));String claims = Claims();System.out.println(claims);}
}
流程分析:
本文发布于:2024-01-31 23:31:45,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170671511032192.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |