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

谷歌云功能授权失败

支嘉祥
2023-03-14

我创建了一个服务帐户,并为其分配了访问云功能的权限:

gcloud beta函数add-iam-policy-binding MyFunction--member=serviceaccount:cf-access@my-project.iam.gserviceaccount.com--role=roles/cloudfunctions.admin

产出:

bindings:
- members:
  - serviceAccount:cf-access@my-project.iam.gserviceaccount.com
  role: roles/cloudfunctions.admin
etag: BwWOGyVdpDg=
version: 1

现在,我下载了服务帐户json文件。

所以现在为了访问云函数,我需要添加带有承载令牌的授权头。为了生成承载令牌,我使用以下java代码:

String fileName = "path/service-account.json";
FileInputStream keyFileInputStream = new FileInputStream(fileName);
GoogleCredential credential = GoogleCredential.fromStream(keyFileInputStream).createScoped(Collections.singleton(ContainerScopes.CLOUD_PLATFORM));    
credential.refreshToken();
String token = credential.getAccessToken();
<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <title>401 Unauthorized</title>
    </head>
    <body text=#000000 bgcolor=#ffffff>
        <h1>Error: Unauthorized</h1>
        <h2>Your client does not have permission to the requested URL 
            <code>/MyFunction</code>.
        </h2>
        <h2></h2>
    </body>
</html>

会出什么问题?令牌生成逻辑有什么不同吗?

共有1个答案

谈灵均
2023-03-14

有三种类型的OAuth令牌。刷新令牌,访问令牌,标识令牌。

您正在尝试使用OAuth访问令牌而不是OAuth标识令牌。

对于授权,Google Cloud Functions在Authorization:BearerHTTP头中使用OAuth标识令牌。

 类似资料:
  • 我有一个具有统一访问控制的Google云存储桶,我在权限中添加了“诱惑者”。它说该对象是公共的,但当我尝试打开链接时,仍会收到此消息:“匿名调用方没有storage.objects.get access to the Google Cloud storage object”错误代码为“401”。我希望任何用户都能够访问该链接。我该怎么做?提前谢谢! 向你问好本

  • 当我运行gcloud函数deploy gcp_test——trigger resource xxx-test-123——trigger event google时。存储对象我发现语法错误。 错误:(gcloud.functions.deploy)操作错误:code=3,message=Function load错误:文件索引中的代码。无法加载js。你的代码中有语法错误吗?详细堆栈跟踪:/user\

  • 从今天开始,我无法使用gCloud cli部署云功能。 下面是我部署云功能的gloud命令: 我有个错误: 部署功能(可能需要一段时间-最多2分钟)...失败。 错误:(gcloud.functions.deploy)操作错误:代码=3,消息=生成失败:生成已超时 我曾经在一个小时前编写过相同的脚本,但现在,团队中没有人能够部署云功能,并得到相同的错误。 在stackDrive日志中,我只看到以下

  • 授权失败。请参阅https://developers.google.com/maps/documentation/android/start了解如何正确设置地图。 确保以下内容与API控制台中的内容相对应:包名称:,API密钥:,证书指纹:联系Google服务器失败。建立连接后将进行另一次尝试。 加载地图失败。联系Google服务器时出错。这可能是身份验证问题(但可能是由于网络错误)。 我知道关于

  • 我正在尝试在Android设备上使用一个简单的电话差距应用程序。因此,我遵循了所有步骤,创建了一个项目,该应用程序成功地与GCM服务器通信,并使用我的项目编号获取注册ID。 问题是我不能从服务器端与GCM通信。我最初是在Perl中这样做的,但是即使是GCM文档中的curl example也返回“401”。 他们的API访问密钥被列入了白名单,我试着删除它并创建新的几次。甚至尝试使用浏览器密钥而不是

  • 我正在开发一个应用程序内购买,所以我想知道订阅是否过期。我已经获得了RefreshToken和AccessToken,但是当我试图根据此获取订阅信息时,我总是得到相同的错误:{“错误”:{“错误”:[ {“域”:“全局”, “原因”:“autherror”, “消息”:“无效凭据”, “位置类型”:“头”, “位置”:“授权”}], “代码”:401, “消息”:“无效凭据”}}