首页 > 解决方案 > 可能已过期 JWT php 的 Base 64 解码令牌

问题描述

我正在使用下面的代码对令牌进行 base 64 解码

list($header, $payload, $signature) = explode (".", $token);
$jsondata = base64_decode($payload);    

$data = (array) $jsondata;

$oSession->aSSO["email"] = $data["emails"];
$oSession->aSSO["customerId"] = $data["CustomerId"];

如果我做 var_dump($data);

我明白了

array(1) { [0]=> string(411) 
"{"nbf":1572801391,
"exp":1572801691,
"iss":"ISS",
"aud":"AUD","nonce":"NONCE",
"iat":IAT,
"sid":"SOD",
"sub":"SUB",
"auth_time":1572800662,
"idp":"IDP",
"CustomerId":"CUSTOMERID",
"emails":"EMAIL",
"amr":["pwd"]}" 
}

如何访问电子邮件和 CustomerId?

尽管我们可以从 var_dump 中看到它们存在,但它们都返回空白

我也没有高兴地尝试过 data[0]->CustomerId

标签: phpjsonbase64

解决方案


您应该能够做的是 JSON 解码字符串而不将其转换为数组。

list($header, $payload, $signature) = explode (".", $token);
$jsondata = base64_decode($payload); 
$data = json_decode($jsondata, true);

$oSession->aSSO["email"] = $data["emails"];
$oSession->aSSO["customerId"] = $data["CustomerId"];

推荐阅读