Java JWT 与 PHP 之间 的链接(SSO)

前端时间遇到SSO(单点登录)的问题,是Java 用 JWT 与PHP语言的网站进行数据的互动,在网上搜了很久,没有发现比较合适的资料,可能JWT的方式PHP用的少?研究了下JWT,也就是JSON的字符换进行了加密,JSON我想很多语言都可以用了吧,剩下的就是按照规则进行解密,和判断登录是否成功了。

思路如下:

JWT的字符串是有规则的,以“.”分割,总共是三段,第一段包含的是加密的方法,中间是传递的参数,最后一段是用来判断的密钥。

前两端字符串先用Base64进行解密即可获取相应的数据;最后一段是用来判断前面的数据是否被非法篡改,就是用来判断参数真伪的,一般是把前两段的字符串连起来加上私有的密钥进行按规则的加密(规则在JWT的第一段)在进行Base64加密,对比字符串是否一致。

下面是自己写的个类,里面两个方法,一个是判断,一个是加密成数组方便使用:

class jwt
{
function jwt($jwtkey)//把获取到的参数
{
$url_str = $jwt = [];
$url_str = explode(".",$jwtkey);//截取字符串
$jwt['alg'] = $url_str[0];//定义新数组
$jwt['content'] = $url_str[1];
$jwt['hash'] = $url_str[2];
$alg = base64_decode($jwt['alg']);//base64解密
$content = base64_decode($jwt['content']);
$arr_jwt['alg'] = json_decode($alg,true);//生成可用的关联数组
$arr_jwt['content'] = json_decode($content,true);
$arr_jwt['hash'] = $jwt['hash'];
return $arr_jwt;
}

function jwt_validate($jwtkey,$key)//判断传值的安全
{
        $arr_s = explode(".",$jwtkey);
        $onetwo = $arr_s[0].'.'.$arr_s[1];
        $three = $arr_s[2];
$hash = hash_hmac('SHA256',$onetwo,$key,true);
$hash = base64_encode($hash);
$hash = str_replace('/','_',$hash);
$hash = str_replace('+','-',$hash);
$hash = substr($hash,0,strlen($hash)-1); 
if($hash == $three)
{
return true;
}
else
{
return false;
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值