使用PHP和服务帐户连接到IAP(身份识别代理)保护服务

时间:2017-05-16 08:05:57

标签: php service-accounts google-iap

如何通过服务帐户使用PHP连接到受IAP保护的服务?我已经无法获得身份验证承载,所以我想我完全走错了路线:

<?php
require_once 'vendor/autoload.php';

$scopes = ['https://www.googleapis.com/auth/iam'];

$client = new Google_Client;
$client->useApplicationDefaultCredentials();
$client->setScopes($scopes);
$client->setSubject('example@example.iam.gserviceaccount.com');
$client->setOpenidRealm('https://example.com');
$access_token = $client->getAccessToken();

var_dump($access_token);

任何指向何处以及如何开始的指针都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

你见过https://cloud.google.com/iap/docs/authentication-howto吗?不幸的是,我们还没有PHP的示例代码,但这解释了基本概念。 &#34;机器人游行&#34; https://cloudplatform.googleblog.com/2017/04/Getting-started-with-Cloud-Identity-Aware-Proxy.html的部分也可能有用。

不幸的是,IAP不支持访问令牌进行身份验证,因此您需要获得一个服务帐户签名的JWT,并且需要有一个特殊的&#34; target_audience&#34 ;要求。是否设置了$ client-&gt; config [&#39; signing_key&#39;]?如果是这样,您可以访问服务帐户的私钥,并且可以...查看https://github.com/google/google-auth-library-php/blob/master/src/OAuth2.php#L417,如果您可以获取凭据对象,则可以执行类似的操作,添加target_audience声明

如果您没有可以访问私钥,我认为只有您在GCE上运行并使用元数据服务器中的服务帐户时才会这样做,您必须使用IAM signBlob API:https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts/signBlob。这需要在GCE实例上进行一些棘手的设置,https://cloud.google.com/iap/docs/authentication-howto记录它。

对不起,我知道这比它应该更复杂!我不是PHP专家,但我希望这至少有帮助。    - Matthew,身份识别代理工程师