ericnorris / gcp-auth-contrib
一个专注于速度和正确性的非官方Google Cloud Platform认证库。
Requires
- fig/http-message-util: ^1.1
- firebase/php-jwt: ^5.2
- google/auth: ^1.13
- guzzlehttp/guzzle: ^6
- guzzlehttp/psr7: ^1.6
- psr/cache: ^1.0
- symfony/cache: ^5.1
Requires (Dev)
- mikey179/vfsstream: ^1.6
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^9.3
- spatie/phpunit-snapshot-assertions: ^4.2
- vimeo/psalm: ^3.15
This package is auto-updated.
Last update: 2024-09-27 09:36:41 UTC
README
gcp-auth-contrib
是一个非官方的PHP库,用于认证Google Cloud Platform产品,它注重合理的默认设置、正确性和速度。
-
安全地缓存所有认证I/O,以减少在Web服务器环境下运行PHP时的请求延迟。
-
所有I/O都是懒惰的,通过在初始化期间不执行任何I/O来避免意外DoS元数据服务器(DoSing)。
-
支持开箱即用的服务账户模拟。
-
清晰地区分获取OAuth2访问令牌和OIDC身份令牌,以便轻松调用Cloud Functions、Cloud Run和类似产品。
-
通过Psalm进行了完全类型化。
$fetcher = \ericnorris\GCPAuthContrib\OpinionatedDefaults::get()->makeCredentialsFetcher(); $storageClient = new \Google\Cloud\Storage\StorageClient([ "credentialsFetcher" => $fetcher, ]); // ...
安装
composer require ericnorris/gcp-auth-contrib
用法
以下示例都使用了OpinionatedDefaults类。默认设置如下:
-
使用普通的Guzzle HTTP客户端。这意味着将抛出异常以处理HTTP错误,例如
500s
。 -
使用应用程序默认凭证模式来查找凭证。注意:如果您在Google Cloud Platform产品上运行代码,则无需提供服务账户密钥文件。使用此库(和合理的默认设置)将自动使用您正在运行的产品元数据服务器进行认证。
-
使用Symfony内存和文件系统缓存来缓存认证I/O。访问和身份令牌在有效期内被缓存,在其他请求安全的情况下永久缓存。
如果这些默认设置对您不起作用,Credentials目录包含一系列灵活的类,您可以使用它们进行认证。强烈建议您使用CachedCredentials实例包装任何此类类,以避免不必要的I/O。
通过Google Cloud Platform API进行认证
Google Cloud Platform PHP库通常需要传递一个实现FetchAuthTokenInterface接口的类到其客户端的credentials
或credentialsFetcher
选项数组键。这取决于特定的客户端,请参阅您特定客户端的文档以了解使用哪个。
您可以通过调用OpinionatedDefaults
类的makeCredentialsFetcher
来获取兼容的FetchAuthTokenInterface
接口。
$fetcher = \ericnorris\GCPAuthContrib\OpinionatedDefaults::get()->makeCredentialsFetcher(); // the StorageClient class takes the parameter as a "credentialsFetcher" option $storageClient = new \Google\Cloud\Storage\StorageClient([ "credentialsFetcher" => $fetcher, ]); // the BigtableClient class takes the parameter as a "credentials" option $bigtableClient = new \Google\Cloud\Bigtable\BigtableClient([ "credentials" => $fetcher, ]); // ...
通过Google Cloud Platform无服务器产品进行认证
调用认证的 Cloud Run 或 Cloud Function 服务需要 OIDC 身份令牌。该库中所有 Credentials 实例都提供了一个单独的 fetchIdentityToken(string $audience)
方法,专门为此目的。
注意: 这包括 AuthorizedUserCredentials!您可以使用用户的 OAuth 凭据(通过 gcloud auth application-default login
或自行进行 OAuth2 流程)来调用认证的无服务器产品。
$credentials = \ericnorris\GCPAuthContrib\OpinionatedDefaults::get()->makeCredentials(); $identityTokenResponse = $credentials->fetchIdentityToken("https://your-cloud-function-or-run-url-here"); $headers = [ "Authorization: Bearer {$identityTokenResponse->getIdentityToken()}", ]; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "https://your-cloud-function-or-run-url-here"); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // ...
模拟服务账户
您可以使用 服务账户模拟流程来模拟另一个 Google Cloud Platform 服务账户。假设运行以下代码的服务账户在虚构服务账户 other-account@some-project-id.iam.gserviceaccount.com
上具有 roles/iam.serviceAccountTokenCreator
IAM 角色。
$fetcher = \ericnorris\GCPAuthContrib\OpinionatedDefaults::get()->makeImpersonatedCredentialsFetcher( "other-account@some-project-id.iam.gserviceaccount.com", ); // calls will be authenticated using the other account's credentials $storageClient = new \Google\Cloud\Storage\StorageClient([ "credentialsFetcher" => $fetcher, ]); // ...
确定项目ID
可能不支持所有凭证类型。
$credentials = \ericnorris\GCPAuthContrib\OpinionatedDefaults::get()->makeCredentials(); echo "project ID: {$credentials->fetchProjectID()}";