对接一个java
项目,那边派发的JWT
需要在php
这边校验签名的有效性:
java生成JWT代码:
public static final String key = "123456789";
private static final SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(UTF8_CHARSET), “HmacSHA256”);
token = Jwts.builder()
.setIssuer(ISSUER)
.claim(KEY_V, 1)
.claim(KEY_ACCOUNT_ID, '123123')
.claim(KEY_APP_VERSION, '1.2.3')
.setIssuedAt(new Date())
.setExpiration(this.expireTime)
.signWith(SignatureAlgorithm.HS256, secretKey).compact();
java 解析代码
// 这里的secretKey就是上面的
Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();
带上这样的jwt
来请求php这边,尝试使用标准jwt
包解析都不太行,验证签名不相符,自己动手吧;
PHP 解析代码
protected function parseToken(token,key)
{
arr = explode('.',token);
if (count(arr) != 3) {
throw new UserException('授权码格式错误');
}header = base64_decode(arr[0]);payload = base64_decode(arr[1]);sign = arr[2];localSign = this->base64UrlEncode(hash_hmac('sha256',arr[0] . '.' . arr[1],key, true));
if (sign !=localSign) {
throw new UserException('签名校验失败');
}
return payload;
}
public function base64UrlEncode(str)
{
data = base64_encode(str);
data = str_replace(array('+', '/', '='), array('-', '_', ''),data);
return $data;
}
JAVA发布的JWT在PHP校验签名,关联SecretKeySpec,HmacSHA256,hash_hmac
原文链接:https://beltxman.com/3872.html,若无特殊说明本站内容为 行星带 原创,未经同意禁止转载。