我正在创建一个我希望在未来几周内开源的应用程序 . 源代码在Github上,Heroku在有新的提交时自动部署代码,如果它通过了Travis CI测试 .
在这个应用程序中,我有几个API密钥,我通过在我的heroku dynos中使用env变量设法阻止在开源存储库之外 .
但是,对于Google服务器到服务器API,我必须有一个 .p12
文件 . 在PHP中,以下将验证我的客户端:
$client = new Google_Client();
$client->setApplicationName("Client_Calendar");
$service = new Google_Service_Calendar($client);
$key = file_get_contents('myKey.p12');
var_dump($key);
$cred = new Google_Auth_AssertionCredentials(
'xxx@gserviceaccount.com',
array('https://www.googleapis.com/auth/calendar'),
$key
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
...
$event = $service->events->insert($calendarId, $event, $sendNotifications);
起初,我以为我可以提取 $key
变量的内容并将其插入另一个heroku环境变量,但内容已加密 .
所以,问题是:如何保护您的密钥免于在开源存储库中被盗?
PS:我只是创建Google日历活动并向与会者发送通知;如果你知道如何在不使用 .p12
文件的情况下做到这一点,我很满意 .
1 回答
唐't commit it. Seriously, it'这很容易 . 你在heroku config variables的正确轨道上 . 实际上即使从这里发布它你也可能想要一个新密钥 .
有建议将整个配置文件存储在可能需要您可以存储的凭据的其他位置 . S3是这种事情的好地方 . S3也有一个惊人的PHP组件,用于访问S3存储桶 .