【问题标题】:Unable to decode JWT tokens PHP无法解码 JWT 令牌 PHP
【发布时间】:2020-12-01 18:40:11
【问题描述】:

我尝试使用下面的代码解码给定的令牌。密钥应该是 base64 编码的。但是,当我尝试解码时,它告诉我我的签名无效。令牌是从使用 Java 的系统生成的,我必须在 PHP 中对其进行解码。

代币:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyZXN1bHQiOiJzdWNjZWVkZWQiLCJpc3MiOiJ4eXoubmUuanAiLCJwcm9maWxlSWRlbnRpZmllciI6IioqKioqKio0NTY3IiwiZXhwIjoxNTk3MjAxNzQyLCJub25jZSI6ImRlNTRlODE3YmQ4NjM4MTI5ZWQ2ZDkxNDA1YTkwMTUyYWIzNTE4N2NkYWMxMDIxNmQ5NWI5NmUzYjgyMjAxNTFhZmU0ZDE4NWZlMzYzNTExNWMwNDFhOWY4OTNjMGZmMGFmZjFkYzBjODgyMDhmMjEwN2ZlMzk5Mzg3ZDMzZGMyZTllY2E5ODA0NDNmZjJiNjZiZDM1ZDk1YjAzY2ExMjIiLCJyZWZlcmVuY2VJZCI6IlRFU1QxMjM1ZjMzNTc3MzBlYjcxIn0.fvEsTg6OcCx2iBPMP-7e9AZtEviDqAEfTMZJib7UVQg

解码脚本

use \Firebase\JWT\JWT;
$encodedString = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyZXN1bHQiOiJzdWNjZWVkZWQiLCJpc3MiOiJ4eXoubmUuanAiLCJwcm9maWxlSWRlbnRpZmllciI6IioqKioqKio0NTY3IiwiZXhwIjoxNTk3MjAxNzQyLCJub25jZSI6ImRlNTRlODE3YmQ4NjM4MTI5ZWQ2ZDkxNDA1YTkwMTUyYWIzNTE4N2NkYWMxMDIxNmQ5NWI5NmUzYjgyMjAxNTFhZmU0ZDE4NWZlMzYzNTExNWMwNDFhOWY4OTNjMGZmMGFmZjFkYzBjODgyMDhmMjEwN2ZlMzk5Mzg3ZDMzZGMyZTllY2E5ODA0NDNmZjJiNjZiZDM1ZDk1YjAzY2ExMjIiLCJyZWZlcmVuY2VJZCI6IlRFU1QxMjM1ZjMzNTc3MzBlYjcxIn0.fvEsTg6OcCx2iBPMP-7e9AZtEviDqAEfTMZJib7UVQg";
$key = base64_encode("testing1234453656347nsmvfdbsrtgjnfsjhNJFDJFujragrg");
$decoded = JWT::decode($encodedString, $key, array('HS256'));

它在jwt.io 上解码得很好,并选择了secret base64 encoded 选项。我在这里做错了什么?

【问题讨论】:

    标签: php jwt base64 php-jwt


    【解决方案1】:

    当密钥已经经过 Base64 编码后,您必须先对其进行解码,然后再将其传递给JWT::decode

    $key = base64_decode("testing1234453656347nsmvfdbsrtgjnfsjhNJFDJFujragrg");

    这就是 JWT.io 在选中“秘密 base64 编码”复选框时所做的事情。

    字面意思是:“输入字段中的秘密是base64编码的,因此需要解码”。

    我可以确认令牌签名可以用这个秘密进行验证,并检查“秘密 base64 编码”。

    令牌是从使用 Java 的系统生成的,我必须在 PHP 中对其进行解码。

    这通常应该是无关紧要的。 JWT 基于独立于语言的标准。

    【讨论】:

    • 感谢帮助。我真的不想相信这一点,但我正在使用一个最初没有经过 base64 编码的字符串 API。我的 JWT 密钥不会是垃圾值吗?这不是可以通过解释器或编译器的更改来破坏的吗?
    • 我不太确定你在问什么。您问题中的秘密当然不是真正的 base64 编码(如果这是您的意思),但对于 base64 来说没关系,只要所有字符都是有效的 base64 字符。而且 HMAC-SHA256 中的秘密本身也没有指定的格式,只有一堆位(与 RS256 不同)。没关系,我看不出这里有什么问题。
    猜你喜欢
    • 2021-06-30
    • 2018-08-14
    • 2020-07-25
    • 2019-09-24
    • 2021-12-30
    • 2018-10-05
    • 2019-05-19
    • 2017-04-15
    • 2018-11-01
    相关资源
    最近更新 更多