平台第三方应用集成单点登录解决方案

平台第三⽅应⽤集成单点登录解决⽅案
平台第三⽅应⽤集成单点登录解决⽅案
1. 使⽤场景
基于统⼀⽤户平台实现多应⽤集成单点登录,统⼀⼊⼝登录后⽤户实现共享,实现多系统认证登录,权限由各业务系统内部实现。
1. 实现原理
JSON Web Token(JWT)是⼀个⾮常轻巧的规范。这个规范允许我们使⽤JWT在⽤户和服务器之间传递安全可靠的信息。⼀个JWT实际上就是⼀个字符串,它由三部分组成,头部(header)、载荷(playload)与签名(signature)。
1)⽬标应⽤获取到token后需要对其进⾏解密,得到JWT头、有效负荷,按照约定算法进⾏编码加密形成验签,再同签名进⾏对⽐以判断数据的完整性和⼀致性。
2)验证通过后解码有效载荷内容,获取有效期属性判断该token是否超期失效。
3)验证token在有效期内,获取到统⼀⽤户的登录ID,并进⾏⾃⼰系统内的⽤户验证和权限判断实现登录或者跳转到业务界⾯。
禽兽传奇
1. 单点登录使⽤⽅式可利霉素
单点登录的⽬标应⽤访问地址:
JAVA:
⽅法⼀:需要导⼊commons-lang-2.5.0.jar  jackson-all-1.9.11.jar  sso-decoder-1.0.0.jar
如果应⽤中已经存在对应jar包或者更⾼版本则可以不⽤导⼊。
代码⽰例:
import com.boshan.sso.validation.TokenDecoder;
TokenDecoder tokenDecoder = new TokenDecoder();
String result = tokenDecoder.checkUserToken(token);
result参数说明{“issuccess”:”true”, ”userid”:”admin”, “message”:””}
参数名称参数值说明
issuccess true/false验证通过则为true
userid⽤户登录ID验证失败值为空
message单点登录验证消息验证通过值为空
⽅法⼆:对token进⾏Base64解码,解码后的字符串由三部分组成.
如:头部header.载荷playload.签名signature
eyJ0eXAiOiJKV1QiLCJhbGciOiJNRDVIZXgifQ==.eyJleHAiOiIyMDIwLTAxLTE2IDEzOjM4OjM1IiwidXNlcmlkIjoibG9naW5uYW1lIiwidXN
对头部header进⾏Base64解码后获得字符串 {“typ”:”jwt”, ” alg”:” MD5Hex” } 得到算法MD5Hex。
联系⽅案提供⽅获取截长数值SPLIT和秘钥SECRETKEY ①。
根据SPLIT⼤⼩对头部header截取字符串前⼏位作为⼀个字符串值②。
根据SPLIT⼤⼩对载荷playload截取字符串后⼏位作为⼀个字符串值③。
将①,②,③ 按照对应算法进⾏加密,将加密后的字符串与签名signature进⾏⽐对以便验证数据的完整性和⼀致性。
⼀致性验证通过后,对载荷playload字符串再进⾏Base64解码获取⼀个json字符串。
如:{“username”:”张三”, ”userid”:”admin”, “exp”:”2020-01-16 16:22:39”}
请根据exp字段与系统当前时间进⾏验证该token是否已经失效。
有效性验证通过后,可以直接获取userid字段值,然后在⾃⼰系统内验证⽤户有效性以及权限进⾏系统登录或者界⾯跳转。
public String getSign(String header, String paload){
String prifix = header.substring(0, Constants.SPLIT);
String suffix = paload.substring(paload.length() - Constants.SPLIT, paload.length());
String sign = "";
try {
pe正能量
String[] str = {prifix, Constants.SECRETKEY, suffix};
List<Byte> list = new ArrayList<Byte>();
for (String string : str) {
for(byte b : Bytes("UTF-8")) {
list.add(b);
}
}
Collections.sort(list);
sign = StringUtils.Array(), ",");
sign = MD5Hex (sign, 32);
sign = MD5Hex (sign, 32);
} catch (Exception e) {
巴西开幕式System.out.Message());
}
return sign;
}
private static String MD5Hex (String contentText,int length) {
try {
MessageDigest messageDigest = Instance("MD5");                  messageDigest.Bytes());
byte bytes[] = messageDigest.digest();
int index;中红外光谱
StringBuffer data = new StringBuffer("");
for (int offset = 0; offset < bytes.length; offset++) {
index = bytes[offset];
if (index < 0) {
index += 256;
}
if (index < 16) {
data.append("0");
}
广州白云职业学院data.HexString(index));
}
if (length == 32) {//32位加密
String().toUpperCase();
}else if (length == 16) {// 16位的加密
String().substring(8, 24).toUpperCase();
}else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
C#、PHP等其他编程语⾔请参看以上⽅法⼆的实现原理进⾏处理。

本文发布于:2024-09-22 15:23:18,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/241864.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:登录   验证   字符串   实现
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议