【问题标题】:GAE PHP 7 403 FORBIDDEN error while got URL to upload file获取上传文件的 URL 时出现 GAE PHP 7 403 FORBIDDEN 错误
【发布时间】:2021-08-09 11:56:50
【问题描述】:

我在管理从 PHP5 到 PHP7 的迁移时遇到了一些问题。

实际上,我用 php5 做的事情是获取上传文件的 URL,是这样的:

$options = [ 'gs_bucket_name' => 'mybucket.appspot.com' ];
$myvar = $_GET['myvar'];

$upload_url = CloudStorageTools::createUploadUrl($myvar, $options);

return $upload_url;

我已经上传了库,现在我正在尝试使用

Google\Cloud\Storage\StorageClient

我已经将上面的代码转换成这样的:

$bucketName = 'mybucket.appspot.com';
$objectName =  $_GET['myvar'];

$storage = new StorageClient([
        'scopes' => [
        'https://www.googleapis.com/auth/iam',
        'https://www.googleapis.com/auth/devstorage.full_control',
        ]
    ]);
    
 $bucket = $storage->bucket($bucketName);
 $object = $bucket->object($objectName);
 $upload_url = $object->signedUrl(
            new \DateTime('90 min'),
            [
                    'version' => 'v4',
            ]
    );

 return $upload_url;

我收到 403 FORBIDDEN 错误

Fatal error: Uncaught GuzzleHttp\Exception\ClientException: Client error: `POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/myproject@appspot.gserviceaccount.com:signBlob?alt=json` resulted in a `403 Forbidden` response:
{
  "error": {
    "code": 403,
    "message": "IAM Service Account Credentials API has not been used in project 123456 (truncated...) 
....

有什么建议吗?在 PHP5 版本中上传工作(使用旧代码),所以我想我的应用程序 angine 服务帐户设置了正确的权限。

谢谢

【问题讨论】:

  • 你为什么在你的问题中截断message?解决方案在消息中。转到消息中的链接并启用 API。或使用 CLI:gcloud services enable iamcredentials.googleapis.com
  • 我没有截断,是原始消息。 (下一行只是关于从库中调用特定文件的特定行......)。 API 已启用。

标签: php google-app-engine google-cloud-platform google-cloud-storage php-7


【解决方案1】:

通过传递.json文件进行身份验证解决。

$storage = new StorageClient([
    'projectId' => "my_project",
    'keyFilePath' => 'key/serviceaccount.json', 
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多