我正在尝试使用google的新的firebase建立自定义的auth,遵循以下指导原则:图书馆
在samble代码中,它说:
从JSON密钥文件中获取服务帐户的电子邮件地址和私钥
不幸的是,我不知道从哪里得到这个json文件。如果我转到我的防火墙控制台(https://console.firebase.google.com/),我设法加载一个json文件,但是它不包含任何电子邮件地址和私钥。
我设法在google控制台(http://console.cloud.google.com)中找到了一个包含电子邮件入口和私钥的json文件,方法是进入"API Manager >凭据“菜单。令人惊讶的是,我的防火墙应用程序显示在那里。我将电子邮件和密钥复制并粘贴到示例代码中,然后得到以下错误:
警告:在第183行/volume1/web/yeti/vendor/firebase/php-jwt/src/JWT.php中,不能将提供的密钥param强制转换为私钥,致命错误: /volume1/web/yeti/vendor/firebase/php-jwt/src/JWT.php:185堆栈跟踪中带有消息“OpenSSL无法签名数据”的未捕获异常“DomainException”:#0 /volume1/web/yeti/vendor/firebase/php-jwt/src/JWT.php(154):Firebase\JWT\JWT::/volume1/web/yeti/vendor/firebase/php-jwt/src/JWT.php(154):(‘eyJ0eXaiOiJKV1Q.’,NULL,#1 /RS256 1/web/yeti/jwt.php(21):Firebase\JWT\JWT::encode(RS256,NULL,'RS256') #2 /volume1 1/web/yeti/jwt.php(24):create_custom_token('1234',false) #3 {main}在第185行抛入
有人知道我做错了什么吗?
谢谢
发布于 2016-06-23 21:36:04
你找到解决办法了吗?还在经历同样的问题!与HS256一起工作,而不与RS256合作。谷歌云是一种限制吗?
“谢谢你!”
问题:使用错误的密钥和电子邮件。这些应该在对应于Firebase项目的Google凭据部分中生成。
解决方案:
填写以下值:
“"autogeneratedemail@developer.gserviceaccount.com";$private_key =”- $is_premium_account = $uid;
您不需要更改"create_custom_token“函数中的任何内容,可能需要根据您的需要更改过期日期/时间。
然后调用该函数:
create_custom_token($uid, $is_premium_account);发布于 2016-06-23 21:51:08
这就是我要做的,而且效果很好。您在claims数组中提供的是安全规则中显示在auth上的内容。电子邮件和密钥来自您在创建服务帐户时获得的json文件(请参阅:在开始部分之前)。
$userId = '1234';
$email = 'sample@email.com';
$key = 'giant_key_goes_here';
$payload = [
'iss' => $email,
'sub' => $email,
'aud' => 'https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit',
'iat' => time(),
'exp' => time() + 60 * 60,
'uid' => $userId,
'claims' => [
'uid' => $userId,
],
];
$token = JWT::encode($payload, $key, 'RS256');值得注意的是,键上的格式是一个小的tricky...Your键,看起来如下(只是一个示例键):
-----BEGIN PRIVATE KEY-----
MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp
wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5
1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh
3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2
pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX
GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il
AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF
L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k
X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl
U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ
37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0=
-----END PRIVATE KEY-----您可能需要做一些花哨的格式化,这基本上就是我所做的:
$key = "-----BEGIN PRIVATE KEY-----\nMIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp\nwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5\n1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh\n3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2\npIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX\nGukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il\nAkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF\nL0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k\nX6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl\nU9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ\n37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0=\n-----END PRIVATE KEY-----\n";注意,换行符被转换为\n,所有这些都被擦到一行上。有各种各样的方法来完成它,but...Based对您所得到的错误,类似这样的事情可能是问题。
发布于 2016-06-14 12:51:03
找到了我自己到底是怎么回事!文档中的示例php代码是错误的。而不是
return JWT::encode($payload, $private_key, "RS256");使用
return JWT::encode($payload, $private_key, "HS256");编辑:
实际上,完全错误的只是google文档中的php示例代码。它将一个空密钥传递给php。看起来他们今天更新了它,并且运行良好:)
https://stackoverflow.com/questions/37801444
复制相似问题