所以我有一个用python写的客户端和一个用PHP写的后端。python客户端使用pyjwt,而php服务器使用Firebase JWT。
在php中对令牌进行编码和解码时,一切工作正常。但是,当我用php对python中的令牌进行编码和解码时,Firebase库返回一个错误:
Firebase\JWT\SignatureInvalidException Object
(
[message:protected] => Signature verification failed
[string:Exception:private] =>
[code:protected] => 0
[file:protected] => /var/www/vendor/firebase/php-jwt/src/JWT.php
[line:protected] => 110
...编码python代码如下所示
import jwt
...
payload = {'sub': self.client.id, 'exp': (datetime.now() + timedelta(days=1)).timestamp()}
context['token'] = jwt.encode(payload, os.environ['JWT_KEY'], algorithm='HS256')PHP代码如下所示
$key = getenv("JWT_KEY");
return (array) \Firebase\JWT\JWT::decode($token, $key, array('HS256'));发布于 2017-03-15 18:13:01
好了,我找到问题了。问题是不同各方使用的秘密密钥。这个密钥在被PHP读取时出现了问题,这就是为什么它创建了不同的令牌。这些库都很好,它们之间的通信没有任何问题。
https://stackoverflow.com/questions/42716903
复制相似问题