繁体   English   中英

PHP中的Firebase令牌验证

[英]Firebase token verification in php

我在Android客户端中有一个PHP后端,我正在使用Firebase提供的电子邮件/密码登录。 我想在后端验证令牌。 我遇到了一些麻烦,直到现在我都无法解决。 第一个是一个疑问,根据Firebase,标头中将包含一个孩子 ,该孩子必须与他们在此站点中提供的某些公钥相匹配: https : //www.googleapis.com/robot/v1/metadata/x509/securetoken@system .gserviceaccount.com好,我已经做了一些测试,我发现这个孩子并不总是相同的,这意味着可以是任何与孩子匹配的公钥:我已经在jwt.io中对此进行了测试。网站,一切正常,但随后在php代码中不起作用。 如果孩子被编码,我怎么知道应该使用公开密钥?要解码,我需要那个公开密钥?

我遇到的第二个麻烦是我正在使用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/securetoken@system.gserviceaccount.com获取公共密钥JSON。 然后,将其解码为数组,然后使用您的KID获得正确的公钥。

我遇到的第二个麻烦是我正在使用firebase / php-jwt库,并且正在按照他们提供的文档来解码令牌,但它不起作用

您遇到什么错误? 您使用的算法正确吗? 尝试将RS256更改为HS256。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM