Google cloud platform 为什么';t授予';allAuthenticatedUsers&x27;成员';云函数调用器';谷歌云功能的角色工作?

Google cloud platform 为什么';t授予';allAuthenticatedUsers&x27;成员';云函数调用器';谷歌云功能的角色工作?,google-cloud-platform,oauth-2.0,google-cloud-functions,Google Cloud Platform,Oauth 2.0,Google Cloud Functions,根据谷歌文档,“allAuthenticatedUsers”成员将包括任何经过身份验证的人,包括普通gmail帐户。所以我给了那个成员“云函数调用器”的角色,认为任何经过身份验证的用户都应该能够调用我的谷歌云函数。这是行不通的。我得到以下结果: 错误:禁止您的客户端没有从此服务器获取URL/function-1的权限 我已经证明,如果我将“云函数调用器”角色授予“allUsers”,则可以调用该函数。所以我知道这个函数是有效的(这是谷歌云创建的默认函数) 那么为什么授予“allAuthentic

根据谷歌文档,“allAuthenticatedUsers”成员将包括任何经过身份验证的人,包括普通gmail帐户。所以我给了那个成员“云函数调用器”的角色,认为任何经过身份验证的用户都应该能够调用我的谷歌云函数。这是行不通的。我得到以下结果:

错误:禁止您的客户端没有从此服务器获取URL/function-1的权限

我已经证明,如果我将“云函数调用器”角色授予“allUsers”,则可以调用该函数。所以我知道这个函数是有效的(这是谷歌云创建的默认函数)

那么为什么授予“allAuthenticatedUsers”成员“云函数调用器”角色不适用于谷歌云函数呢?我错过了什么


谢谢

您不应根据在项目级别上应用
allUsers
allAuthenticatedUsers
(请参阅“控制项目中所有功能的访问权限”中的说明)。您可以尝试将其应用于您想要保护的单个功能吗?

您不应该根据在项目级别上应用
allUsers
allAuthenticatedUsers
(请参阅“控制项目中所有功能的访问权限”中的说明)。您可以尝试将此角色应用于要保护的单个函数吗?

您可以将此角色应用于单个函数


如果您想保护项目上的所有资源,我的意思是,如果您不想允许Alluser访问GCP资源,如功能、云运行、存储等,您可以激活。有了它,allUsers将被禁止。

您可以在单个函数上应用此角色


如果您想保护项目上的所有资源,我的意思是,如果您不想允许Alluser访问GCP资源,如功能、云运行、存储等,您可以激活。有了它,诱惑者就被禁止了。

正确答案

约翰·汉利功不可没。我需要在承载令牌授权头中使用id\u令牌,而不是我的访问令牌

我不知道如何将这个问题标记为已回答。我不能接受这个评论,也不能接受我自己的回答。我的目标是帮助其他有相同问题的人,将这个问题标记为已回答,但我不能这样做。奇怪


如果可以,请将答案标记为正确。

正确答案

约翰·汉利功不可没。我需要在承载令牌授权头中使用id\u令牌,而不是我的访问令牌

我不知道如何将这个问题标记为已回答。我不能接受这个评论,也不能接受我自己的回答。我的目标是帮助其他有相同问题的人,将这个问题标记为已回答,但我不能这样做。奇怪


如果可以,请将答案标记为正确。

谢谢您的回复。是的,我在功能级别而不是项目级别应用了它。但那不行,谢谢你的回复。是的,我在功能级别而不是项目级别应用了它。但这不起作用,你是怎么测试的?您在请求中添加了哪些标题?您的代码/应用程序需要将HTTP头
授权:承载身份\u令牌
添加到请求中。使用发出请求的客户端的代码编辑您的问题,或者使用标题捕获HTTP请求。第一个是使用postman的,我通过使用在我的项目下创建的oauth客户机获得了访问令牌。该令牌作为不记名令牌发送。那没用。我的第二个测试是简单地转到chrome,登录到google,然后调用函数的URL。我还没有编写客户端代码,因为我无法通过postman使其工作。您使用的两种方法都无效。对于第一种方法,您需要使用身份令牌,您使用的是访问令牌。对于第二种方法,Chrome在调用端点时不添加标识令牌。添加授权标头是您必须编码并包含在HTTP请求中的内容。对于浏览器,这意味着编写Javascript。注意我对身份标识的强调。访问令牌将不起作用。@JohnHanley非常感谢您!它起作用了。我以前试过身份标识时一定是做错了什么。这个代币现在可能已经过期了,这就是我10分钟前尝试失败的原因。我刚得到一个新的令牌,它成功了:)所以这里的关键是使用id\u令牌而不是访问\u令牌非常感谢@mj21你能告诉我你是怎么拿到身份证的吗?我们正在使用firebase.auth().currentUser.getIdToken().then(token…)并将其发送到Authorization:Bearer{token}头中,但仍然收到403个错误,因此我们不得不将调用程序角色授予allUsers:(您是如何测试的?您向请求添加了哪些标头?您的代码/应用程序需要向请求添加HTTP标头
授权:承载身份\u令牌
。使用代码编辑您的问题,以便客户端发出请求或捕获带有标头的HTTP请求。我做了两个测试。第一个测试使用postman,其中通过使用我在项目下创建的oauth客户端获得访问令牌。令牌作为承载令牌发送。这不起作用。我的第二个测试是简单地转到chrome,登录到google,然后调用函数的URL。我还没有编写客户端代码,因为我无法通过postman使其工作。您使用的两种方法都不可用lid。对于第一种方法,您需要使用身份令牌,您使用的是访问令牌。对于第二种方法,Chrome在调用端点时不添加身份令牌。添加授权头是您必须编码并包含在HTTP请求中的内容。对于浏览器,这意味着编写Javascript。请注意,我强调的是身份令牌恩。访问令牌将不起作用。@JohnHan