我与您分享第一个代码
php代码 http://pastebin.com/b8TNfyzq第22行
JwtTester.java http://pastebin.com/TsF0wsCX第22行
我在php服务器上编写的java代码创建的令牌与令牌不匹配。 虽然我无法在双方验证相同的密钥
我在java代码中使用github.com/jwtk/jjwt 和php代码中的github.com/firebase/php-jwt
与密钥中的java代码和数据相同,当我仅在PHP中创建令牌时,由不同的令牌组成
答案 0 :(得分:0)
是格式转换问题。 jjwt需要在base64中编码的密钥,php-jwt使用普通字符串
JwtBuilder signWith(SignatureAlgorithm alg, String base64EncodedSecretKey);
/**
* Decodes a JWT string into a PHP object.
*
* @param string $jwt The JWT
* @param string|array $key The key, or map of keys.
* If the algorithm used is asymmetric, this is the public key
public static function decode($jwt, $key, $allowed_algs = array()
在调用JwtBuilder.signWith
builder.signWith(SignatureAlgorithm.HS256,
DatatypeConverter.printBase64Binary(key));
答案 1 :(得分:0)
针对仍面临问题的人们。 如果要从Java创建jwt,则将“ typ”标头添加到它,由PHP-jwt检查。另外,jjwt也将密钥编码为base64,因此是从Java
String jwtSecret = "yoursecret";
Map<String, Object> header = new HashMap<>();
header.put("typ", Header.JWT_TYPE);
String jwt = Jwts.builder()
.setHeader(header)
.setSubject("someclaim")
.setIssuedAt(new Date())
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512,TextCodec.BASE64.encode(jwtSecret))
.compact();
在php
define('SECRET', 'yoursecret');
$decoded = (array) JWT::decode($jwt,SECRET, array('HS512'));
如果机密包含特殊字符,似乎也无法正确解码。