[英]JWT Signature verification failed , java to php
我與您分享第一個密碼
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代碼和key中的數據相同,僅在PHP中創建令牌時由不同的令牌組成
是格式轉換問題。 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
之前,將密鑰編碼為base64
builder.signWith(SignatureAlgorithm.HS256,
DatatypeConverter.printBase64Binary(key));
對於仍然面臨該問題的人們。 如果要從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'));
此外,如果機密包含特殊字符,似乎也無法正確解碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.