我有一个用于 Android 客户端的 PHP 后端,我使用 Firebase 提供的电子邮件/密码登录。我想在后端验证令牌。我遇到了一些问题,直到现在我还无法解决。第一个是一个疑问,根据 Firebase,标头将包含一个 kid ,它必须与他们在此站点中提供的一些公钥相匹配:https://www.googleapis.com/robot/v1/metadata/x509/ [电子邮件受保护]
我已经做了一些测试,我发现这个 kid 并不总是相同的,这意味着它可以是任何应该与 kid 匹配的公钥:我已经在 jwt 中对此进行了测试。 io 网站一切正常,但在 PHP 代码中不起作用。如果 kid 已编码并且需要该公钥进行解码,我如何知道应该使用哪个公钥?
我遇到的第二个问题是我正在使用 firebase/php-jwt 库,并且我正在按照他们提供的文档来解码令牌,但它不起作用,这是我的代码使用:
<?php
require '../vendor/autoload.php';
use \Firebase\JWT\JWT;
$jwt = "token from the android client";
$key = "-----BEGIN CERTIFICATE-----\nMIIDHDCCAgSgAwIBAgIIBhyg0WUm0qIwDQYJKoZIhvcNAQEFBQAwMTEvMC0GA1UE\nAxMmc2VjdXJldG9rZW4uc3lzdGVtLmdzZXJ2aWNlYWNjb3VudC5jb20wHhcNMTcw\nMjA3MDA0NTI2WhcNMTcwMjEwMDExNTI2WjAxMS8wLQYDVQQDEyZzZWN1cmV0b2tl\nbi5zeXN0ZW0uZ3NlcnZpY2VhY2NvdW50LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBANgrjKWwUlWeZukViyrrLS6nOWlgQnEahP/sRlVWCC2mkWdB\n9NXsE7L8ZY9uhGNBEC8KknzpeFSJFKBVfRW7onrReCuz2RPJ5tk/7ZP2naY3mLO8\nkU/aHlIYfvcmtJzlISABCLMg5RiUY1IhQDSj8kYKVTo2JhD/plZZ85xHHJ8BpHQv\nWbvtlAJ4WqG8NstOG+LoOMr8Ayi7xsPw4AyT6iHnXcFExzvVsHs/7UBkJKF4eX8L\nocbdfs8qb9T/Bua8mRUahVj9hHntoxG0TCOpV+frxBwHw+wZgig/FRod9u5FirMC\n9tjctwaf9b5pSHMhVhPTAuqg3xwMr/Wq76lCNTkCAwEAAaM4MDYwDAYDVR0TAQH/\nBAIwADAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJ\nKoZIhvcNAQEFBQADggEBABcOJ8zqu+RH9UXf90O2mRMY2CjiLWowIzOX2l+2aHfm\nd9QUM4EpS+E0UbmaOsiMSkxs4rWGppWPqC8Y4dypctXtzftWNMatPZyLni4zLT/t\nKDItjmaN9QrBo1XL+TUg7fw876C4G3xGldqTNgjrQwyQI1QhnNJHpbWqkjJkixX5\ndZ45E+UVoc1uw5VlbdN4/NUKQ4OOKyvHIn5dupNFOF1xrkQmEexE7NA5dENGP07j\no2XDfaOCDKiugV6vCIsQZo9BqTRJIC/3PZFfIyvxmwm5Vq9CInGX1DKS2ToasM5H\nnc5B3AxX3+6fosel/yQZaRfyy7o/FiVdj3gIF+MPe7s=\n-----END CERTIFICATE-----\n";
$decoded = JWT::decode($jwt, $key, array('RS256'));
var_dump($decoded);
?>
这个脚本给了我一些错误。
我将不胜感激任何帮助。
如果孩子被编码,我如何知道应该使用哪个公钥,并且为了解码我需要该公钥?
KID 标头未编码。它是一个表示数组键的字符串值,该数组键指向有效的公钥。 首先,您必须从 https://www.googleapis.com/robot/v1/metadata/x509/[email protected] 获取公钥 JSON。然后,将其解码为数组并使用您的 KID 来获取正确的公钥。
我遇到的第二个问题是我正在使用 firebase/php-jwt 库,并且我正在按照他们提供的文档来解码令牌,但它不起作用
您遇到的错误是什么?您使用正确的算法吗?尝试将 RS256 更改为 HS256。