首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php设置防火墙v3自定义auth

使用php设置防火墙v3自定义auth
EN

Stack Overflow用户
提问于 2016-06-14 01:08:48
回答 5查看 13.1K关注 0票数 8

我正在尝试使用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行抛入

有人知道我做错了什么吗?

谢谢

EN

回答 5

Stack Overflow用户

发布于 2016-06-23 21:36:04

你找到解决办法了吗?还在经历同样的问题!与HS256一起工作,而不与RS256合作。谷歌云是一种限制吗?

“谢谢你!”

问题:使用错误的密钥和电子邮件。这些应该在对应于Firebase项目的Google凭据部分中生成。

解决方案:

  • 转到‘sole.Cloud.google.com’
  • 选择相关的Firebase项目。
  • 然后是'API管理器‘->’凭据‘。
  • “创建凭据”-> 'Service‘->选择JSON。
  • 创建的文件将包含所需的'private_key‘& 'client_email’。

填写以下值:

“"autogeneratedemail@developer.gserviceaccount.com";$private_key =”- $is_premium_account = $uid;

您不需要更改"create_custom_token“函数中的任何内容,可能需要根据您的需要更改过期日期/时间。

然后调用该函数:

代码语言:javascript
复制
create_custom_token($uid, $is_premium_account);
票数 8
EN

Stack Overflow用户

发布于 2016-06-23 21:51:08

这就是我要做的,而且效果很好。您在claims数组中提供的是安全规则中显示在auth上的内容。电子邮件和密钥来自您在创建服务帐户时获得的json文件(请参阅:在开始部分之前)。

代码语言:javascript
复制
$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键,看起来如下(只是一个示例键):

代码语言:javascript
复制
-----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-----

您可能需要做一些花哨的格式化,这基本上就是我所做的:

代码语言:javascript
复制
$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对您所得到的错误,类似这样的事情可能是问题。

票数 5
EN

Stack Overflow用户

发布于 2016-06-14 12:51:03

找到了我自己到底是怎么回事!文档中的示例php代码是错误的。而不是

代码语言:javascript
复制
return JWT::encode($payload, $private_key, "RS256");

使用

代码语言:javascript
复制
return JWT::encode($payload, $private_key, "HS256");

编辑:

实际上,完全错误的只是google文档中的php示例代码。它将一个空密钥传递给php。看起来他们今天更新了它,并且运行良好:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37801444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档