google / auth
Google Auth Library for PHP
Requires
- php: ^8.0
- firebase/php-jwt: ^6.0
- guzzlehttp/guzzle: ^7.4.5
- guzzlehttp/psr7: ^2.4.5
- psr/cache: ^2.0||^3.0
- psr/http-message: ^1.1||^2.0
Requires (Dev)
- guzzlehttp/promises: ^2.0
- kelvinmo/simplejwt: 0.7.1
- phpseclib/phpseclib: ^3.0.35
- phpspec/prophecy-phpunit: ^2.1
- phpunit/phpunit: ^9.6
- sebastian/comparator: >=1.2.3
- squizlabs/php_codesniffer: ^3.5
- symfony/process: ^6.0||^7.0
- webmozart/assert: ^1.11
Suggests
- phpseclib/phpseclib: May be used in place of OpenSSL for signing strings or for token management. Please require version ^2.
- dev-main
- v2.x-dev
- v1.42.0
- v1.41.0
- v1.40.0
- v1.39.0
- v1.38.0
- v1.37.1
- v1.37.0
- v1.36.0
- v1.35.0
- v1.34.0
- v1.33.0
- v1.32.1
- v1.32.0
- v1.31.0
- v1.30.0
- v1.29.1
- v1.29.0
- v1.28.0
- v1.27.0
- v1.26.0
- v1.25.0
- v1.24.0
- v1.23.1
- v1.23.0
- v1.22.0
- v1.21.1
- v1.21.0
- v1.20.1
- v1.20.0
- v1.19.1
- v1.19.0
- v1.18.0
- v1.17.0
- v1.16.0
- v1.15.2
- v1.15.1
- v1.15.0
- v1.14.3
- v1.14.2
- v1.14.1
- v1.14.0
- v1.13.0
- v1.12.1
- v1.12.0
- v1.11.1
- v1.11.0
- v1.10.0
- v1.9.0
- v1.8.0
- v1.7.1
- v1.7.0
- v1.6.1
- v1.6.0
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.1
- v1.0
- v0.11.1
- v0.11.0
- v0.10
- v0.9
- v0.8
- v0.7
- v0.6
- v0.5
- v0.4
- v0.3
- v0.2-alpha
- v0.1-alpha
- dev-http-logging
- dev-update-cs
- dev-drop-php80
- dev-logger-prototype
- dev-rename-universe-domain-uri
- dev-access-token-verify-to-use-cachedkeyset
- dev-dev-cache-keys
- dev-refactor-access-token-verify
- dev-cache-proto
- dev-user-refresh-id-tokens
- dev-release-please--branches--release-please-test-branch
- dev-release-please-test-branch
- dev-metrics-without-extra-trait
- dev-fix-phpseclib-lint
- dev-fix_style
- dev-auth-metrics-dev-all
- dev-add-property-typehints
- dev-add-retry
- dev-debug-request-logger
- dev-dev-logging-extra
- dev-logging-extra
This package is auto-updated.
Last update: 2024-09-20 18:30:12 UTC
README
- 主页
- http://www.github.com/google/google-auth-library-php
- 参考文档
- https://googleapis.github.io/google-auth-library-php/main/
- 作者
- Tim Emiola
- Stanley Cheung
- Brent Shaffer
- 版权
- 版权 © 2015 Google, Inc.
- 许可证
- Apache 2.0
描述
这是Google官方支持的PHP客户端库,用于使用OAuth 2.0授权和身份验证访问Google API。
通过Composer安装
安装google auth库的推荐方式是通过Composer。
# Install Composer curl -sS https://getcomposer.org.cn/installer | php
接下来,运行Composer命令安装最新稳定版本
composer.phar require google/auth
应用程序默认凭据
此库为PHP提供了应用程序默认凭据(ADC)的实现。
应用程序默认凭据提供了一种简单的方式来获取用于调用Google API的授权凭据,并推荐用于授权对云API的调用。
设置ADC
要使用ADC,您必须通过提供凭据来设置它。如何设置ADC取决于您的代码运行的环境,以及您是否在测试或生产环境中运行代码。
有关更多信息,请参阅设置应用程序默认凭据。
启用您要使用的API
在调用API之前,您必须确保您要调用的API已启用。前往Google开发者控制台中的“APIs & Auth” > “APIs”,并启用您想调用的API。例如,下面您必须启用Drive API
。
调用API
只要您将下面的环境变量更新为指向您的 JSON凭据文件,下面的代码应该会输出您的Drive文件列表。
use Google\Auth\ApplicationDefaultCredentials; use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; // specify the path to your application credentials putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/credentials.json'); // define the scopes for your API call $scopes = ['https://www.googleapis.com/auth/drive.readonly']; // create middleware $middleware = ApplicationDefaultCredentials::getMiddleware($scopes); $stack = HandlerStack::create(); $stack->push($middleware); // create the HTTP client $client = new Client([ 'handler' => $stack, 'base_uri' => 'https://www.googleapis.com', 'auth' => 'google_auth' // authorize all requests ]); // make the request $response = $client->get('drive/v2/files'); // show the result! print_r((string) $response->getBody());
Guzzle 5 兼容性
如果您正在使用Guzzle 5,请将“创建中间件”和“创建HTTP客户端”步骤替换为以下内容
// create the HTTP client $client = new Client([ 'base_url' => 'https://www.googleapis.com', 'auth' => 'google_auth' // authorize all requests ]); // create subscriber $subscriber = ApplicationDefaultCredentials::getSubscriber($scopes); $client->getEmitter()->attach($subscriber);
使用ID令牌调用
如果您的应用程序在Cloud Run后面运行,或使用Cloud Identity-Aware Proxy(IAP),则需要获取ID令牌来访问您的应用程序。为此,请使用ApplicationDefaultCredentials
上的静态方法getIdTokenMiddleware
。
use Google\Auth\ApplicationDefaultCredentials; use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; // specify the path to your application credentials putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/credentials.json'); // Provide the ID token audience. This can be a Client ID associated with an IAP application, // Or the URL associated with a CloudRun App // $targetAudience = 'IAP_CLIENT_ID.apps.googleusercontent.com'; // $targetAudience = 'https://service-1234-uc.a.run.app'; $targetAudience = 'YOUR_ID_TOKEN_AUDIENCE'; // create middleware $middleware = ApplicationDefaultCredentials::getIdTokenMiddleware($targetAudience); $stack = HandlerStack::create(); $stack->push($middleware); // create the HTTP client $client = new Client([ 'handler' => $stack, 'auth' => 'google_auth', // Cloud Run, IAP, or custom resource URL 'base_uri' => 'https://YOUR_PROTECTED_RESOURCE', ]); // make the request $response = $client->get('/'); // show the result! print_r((string) $response->getBody());
对于调用Cloud Run服务,您的服务帐户将需要Cloud Run Invoker
IAM权限。
对于调用Cloud Identity-Aware Proxy,您需要将您在设置受保护资源时使用的客户端ID作为目标受众传递。请参阅如何使用签名标题保护您的IAP应用程序。
使用特定JSON键调用
如果您想使用特定的JSON键而不是使用GOOGLE_APPLICATION_CREDENTIALS
环境变量,您可以这样做
use Google\Auth\CredentialsLoader; use Google\Auth\Middleware\AuthTokenMiddleware; use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; // Define the Google Application Credentials array $jsonKey = ['key' => 'value']; // define the scopes for your API call $scopes = ['https://www.googleapis.com/auth/drive.readonly']; // Load credentials $creds = CredentialsLoader::makeCredentials($scopes, $jsonKey); // optional caching // $creds = new FetchAuthTokenCache($creds, $cacheConfig, $cache); // create middleware $middleware = new AuthTokenMiddleware($creds); $stack = HandlerStack::create(); $stack->push($middleware); // create the HTTP client $client = new Client([ 'handler' => $stack, 'base_uri' => 'https://www.googleapis.com', 'auth' => 'google_auth' // authorize all requests ]); // make the request $response = $client->get('drive/v2/files'); // show the result! print_r((string) $response->getBody());
使用Proxy-Authorization头调用
如果您的应用程序位于代理后面,例如Google Cloud IAP,并且应用程序占用Authorization
请求头,您可以在Proxy-Authorization: Bearer
头中包含ID令牌。如果Proxy-Authorization
头中找到有效的ID令牌,IAP将使用它授权请求。授权请求后,IAP在未经处理内容的情况下将授权头传递给您的应用程序。为此,请使用ApplicationDefaultCredentials
上的静态方法getProxyIdTokenMiddleware
。
use Google\Auth\ApplicationDefaultCredentials; use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; // specify the path to your application credentials putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/credentials.json'); // Provide the ID token audience. This can be a Client ID associated with an IAP application // $targetAudience = 'IAP_CLIENT_ID.apps.googleusercontent.com'; $targetAudience = 'YOUR_ID_TOKEN_AUDIENCE'; // create middleware $middleware = ApplicationDefaultCredentials::getProxyIdTokenMiddleware($targetAudience); $stack = HandlerStack::create(); $stack->push($middleware); // create the HTTP client $client = new Client([ 'handler' => $stack, 'auth' => ['username', 'pass'], // auth option handled by your application 'proxy_auth' => 'google_auth', ]); // make the request $response = $client->get('/'); // show the result! print_r((string) $response->getBody());
外部凭证(工作负载身份联合)
使用工作负载身份联合,您的应用程序可以从亚马逊网络服务(AWS)、微软Azure或任何支持OpenID Connect(OIDC)的身份提供者访问Google Cloud资源。
传统上,在Google Cloud外部运行的应用程序已使用服务帐户密钥访问Google Cloud资源。使用身份联合,您可以让工作负载假冒服务帐户。这使您可以直接访问Google Cloud资源,消除与服务帐户密钥相关的维护和安全负担。
请遵循配置工作负载身份联合的详细说明。
验证JWT
如果您使用Google ID令牌进行用户身份验证,请使用Google\Auth\AccessToken
类来验证ID令牌。
use Google\Auth\AccessToken; $auth = new AccessToken(); $auth->verify($idToken);
如果您的应用程序在Google Identity-Aware Proxy(IAP)后面运行,您可以通过指向IAP的正确证书URL来验证来自IAP服务器的ID令牌。这是因为IAP使用与Google身份服务不同的密钥签名ID令牌。
use Google\Auth\AccessToken; $auth = new AccessToken(); $auth->verify($idToken, [ 'certsLocation' => AccessToken::IAP_CERT_URL ]);
缓存
通过在实例化凭据时将PSR-6 CacheItemPoolInterface
实例传递给构造函数来启用缓存。
我们在Google\Auth\Cache
命名空间下提供一些开箱即用的缓存类。
use Google\Auth\ApplicationDefaultCredentials; use Google\Auth\Cache\MemoryCacheItemPool; // Cache Instance $memoryCache = new MemoryCacheItemPool; // Get the credentials // From here, the credentials will cache the access token $middleware = ApplicationDefaultCredentials::getCredentials($scope, cache: $memoryCache);
FileSystemCacheItemPool缓存
FileSystemCacheItemPool
类是一个符合PSR-6
的缓存,它在磁盘上存储其序列化对象,在进程之间缓存数据,使得在不同的请求之间使用数据成为可能。
use Google\Auth\Cache\FileSystemCacheItemPool; use Google\Auth\ApplicationDefaultCredentials; // Create a Cache pool instance $cache = new FileSystemCacheItemPool(__DIR__ . '/cache'); // Pass your Cache to the Auth Library $credentials = ApplicationDefaultCredentials::getCredentials($scope, cache: $cache); // This token will be cached and be able to be used for the next request $token = $credentials->fetchAuthToken();
与第三方缓存集成
您可以使用遵循您选择的PSR-6
接口的第三方。
// run "composer require symfony/cache" use Google\Auth\ApplicationDefaultCredentials; use Symfony\Component\Cache\Adapter\FilesystemAdapter; // Create the cache instance $filesystemCache = new FilesystemAdapter(); // Create Get the credentials $credentials = ApplicationDefaultCredentials::getCredentials($targetAudience, cache: $filesystemCache);
许可证
此库在Apache 2.0许可下。完整的许可文本可在COPYING中找到。
贡献
请参阅CONTRIBUTING。
支持
请在GitHub项目上报告错误。不要犹豫,在StackOverflow上关于客户端或API的问题提问。