当前位置: 首页 > 知识库问答 >
问题:

使用服务帐户的Google Cloud API PHP客户端身份验证

游安康
2023-03-14

我正在处理一个使用PHP的项目,需要使用PHP客户端库实现Google CloudAPI,但身份验证似乎对我不起作用。我已经创建了一个服务帐户并授予了项目所有者权限,我不想通过使用GOOGLE_DEFAULT_CREDENTIALS环境变量进行身份验证,我想使用服务帐户身份验证。

require 'vendor/autoload.php';
use Google\Cloud\Core\ServiceBuilder;
use Google\Cloud\Storage\StorageClient;

// Authentication with Google Cloud Platform
$client = new ServiceBuilder([
    'keyFilePath' => 'api-project-374381085870-eaf930d9ffd7.json'
]);
$client = new StorageClient();
$bucket = $client->bucket('storage_client');

// Upload a file to the bucket.
$bucket->upload(
    fopen('file.txt', 'r')
);

致命错误:未捕获异常“Google\Cloud\Core\exception\ServiceException”,消息“{”错误“:{”错误“:[{”Domain“:”Global“,”Reason“:”AuTherRror“,”message“:”Invalid Credentials“,”LocationType“:”Header“,”Location“:”Authorization“}]”Code“:401,”message“:”Invalid Credentials“}}”,位于/Applications/XAMPP/XAMPPFiles/HTDocs/Storage/Vendor/Google/Cloud-Core/Src/RequestWrapper.php:263堆栈跟踪:#0/Applications/XAMPP/XAMPPFiles/HTDocs/Storage\Core\RequestWrapper->ConvertToGoogleException(对象(GuzzleHTTP\exception\ClientException))

Google\Cloud\Core\RequestWrapper->Send(对象(GuzzleHTTP\PSR7\Request),Array)#2/Applications/XAMPP/XAMPPFiles/HTDocs/Storage/Vendor/Google/Cloud-Storage/Src/Bucket.php(283):Google\Cloud\Core\Upload\MultipartUploader->Upload()#3/Applications/XAMPP/XAMPPFiles/HTDocs/Storage/Vendor/Google/Cloud-Core/Src/RequestWrapper.php(第263行)

救救我,求你了!

提前道谢!

共有1个答案

云承弼
2023-03-14
use Google\Cloud\Core\ServiceBuilder;

$cloud = new ServiceBuilder([
    'keyFilePath' => 'my-keyfile.json'
]);

$storage = $cloud->storage();

use Google\Cloud\Storage\StorageClient;

$storage = new StorageClient([
    'keyFilePath' => 'my-keyfile.json'
]);

在这两个示例中,$storage都应该经过身份验证并可以使用!

 类似资料:
  • 我的团队目前正在开发一个应用程序,使用Admin SDK在GCP中列出公司的域用户,用于入职和非入职目的。 我们使用一个服务帐户来完成这个任务,并且在Google Admin's advanced settings中添加了 作用域。管理SDK API被激活,我们可以在凭据区域中看到服务帐户。 当我们使用参数 和 调用https://www.googleapis.com/admin/director

  • 任务:将Kerberos active directory身份验证添加到不安全的报告和数据操作桌面应用程序。此应用程序是。。。 用Stackless Python 2.7编写 使用Twisted进行客户端-服务器交互 客户端编译为exe并在Windows上运行 服务器在Linux(红帽)上运行 目前,我们从用户帐户中提取Windows网络ID(登录名)并传递到服务器,服务器会查找用户配置为具有的权

  • 应如何管理它们? 一些更具体的问题: 根据定义,本机应用程序(实际上是公共客户端)不能安全地存储其凭据(client_id+secret)。是未注册的客户吗?如果我不能使用秘密来验证/验证它,我还应该做什么? 客户端注册≠endpoint注册:第一个是关于注册客户端凭据();第二个关于注册客户端重定向endpoint。重定向endpoint注册是否足以授予客户端的真实性? 客户端凭据授予是否使用相

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一