【问题标题】:PHP-JWT not decodingPHP-JWT 不解码
【发布时间】:2017-11-11 07:36:00
【问题描述】:

我正在使用 android 库“io.jsonwebtoken:jjwt:0.7.0”来创建令牌,它正确地创建了我检查过的 JWT。我的问题是当我使用 php firebase/php-jwt 库进行解码时。两个库都设置为 HS256 和关键“测试”。我在这里做错了什么?

String compactJws = Jwts.builder()
            .claim("devId", getDeviceId())
            .signWith(SignatureAlgorithm.HS256, "testing")
            .compact();
    logger.i(compactJws);

日志为 eyJhbGciOiJIUzI1NiJ9.eyJkZXZJZCI6Ijc4MGQ1YWRlMzMwNGVhZmEifQ.XIKxG1xZbuMD8FRIAJ735LNbhodAj1a7pMZ6o3IF0ig

https://jwt.io/

use \Firebase\JWT\JWT;
$jwt = "eyJhbGciOiJIUzI1NiJ9.eyJkZXZJZCI6Ijc4MGQ1YWRlMzMwNGVhZmEifQ.XIKxG1xZbuMD8FRIAJ735LNbhodAj1a7pMZ6o3IF0ig";
$key = "testing";
$decoded = JWT::decode($jwt, $key, array('HS256'));
print_r($decoded);

返回未捕获的异常“Firebase\JWT\SignatureInvalidException”,并带有消息“签名验证失败”

【问题讨论】:

  • 在屏幕截图中检查了秘密 base64 编码
  • 那么为什么你在代码中显示一个 JWT 而使用另一个呢?它的签名看起来无效,那么您的实际问题是什么?
  • 我使用了错误的屏幕截图。我更新了我的代码
  • 我也试过 $key = base64_encode("testing");

标签: php firebase-authentication jwt json-web-token


【解决方案1】:

答案是我错过了 "typ":"JWT" 标头并且必须解码密钥

Map<String, Object> header = new HashMap<>();
    header.put("typ", Header.JWT_TYPE);
    .setHeader(header)

PHP 端

 $decoded_array = (array) JWT::decode($jwt, base64_decode($key), array('HS256'));

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 2020-07-25
    • 2020-12-01
    • 2019-01-17
    • 2020-11-22
    • 2018-05-26
    • 2020-04-25
    • 2015-04-14
    • 1970-01-01
    相关资源
    最近更新 更多