php

时间:2017-02-07 07:43:04

标签: php firebase token firebase-authentication

我在Android中有一个客户端的后端,我正在使用Firebase提供的电子邮件/密码登录。我想在后端验证令牌。我有一些麻烦,直到现在我无法解决。第一个是疑问,根据Firebase,标题将包含 kid ,必须与他们在此网站中提供的某些公钥相匹配:https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com 好吧,我做了一些测试,我发现这个孩子并不总是一样,这意味着可以是任何与 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);
?>

这个脚本给了我一些错误。

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

我怎么知道如果孩子被编码我应该使用哪个公钥?为了解码它我需要那个公钥?

KID标头未编码。它是一个字符串值,表示一个数组键,指向有效的公钥。 首先,您必须从https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com获取公钥JSON。然后,将其解码为数组并使用您的KID获取正确的公钥。

  

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

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