0

如何通过服务帐户使用 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);

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

4

1 回答 1

1

你看过https://cloud.google.com/iap/docs/authentication-howto吗?不幸的是,我们还没有 PHP 的示例代码,但这解释了基本概念。https://cloudplatform.googleblog.com/2017/04/Getting-started-with-Cloud-Identity-Aware-Proxy.html的“Robot Parade”部分也可能会有所帮助。

不幸的是,IAP 不支持访问令牌进行身份验证,因此您需要获得一个服务帐户签名的 JWT,并且它需要有一个特殊的“target_audience”声明。$client->config['signing_key'] 设置了吗?如果是这样,您可以访问服务帐户的私钥,并且可以...查看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,身份感知代理工程师

于 2017-05-16T21:39:21.940 回答