这里是我的用例。
但是,我不能使用我的用户帐户凭据。
日志跟踪在Java、Node或Go中非常清晰:不可能在用户凭据类型上生成标识令牌。
所以,
爪哇
我做这个
Credentials credentials = GoogleCredentials.getApplicationDefault().createScoped("https://www.googleapis.com/auth/cloud-platform");
IdTokenCredentials idTokenCredentials = IdTokenCredentials.newBuilder()
.setIdTokenProvider((IdTokenProvider) credentials)
.setTargetAudience(myUri).build();
HttpRequestFactory factory = new NetHttpTransport().createRequestFactory(new HttpCredentialsAdapter(idTokenCredentials));
并且我的用户凭据与IDTokenProvider
接口不兼容
Caused by: java.lang.ClassCastException: class com.google.auth.oauth2.UserCredentials cannot be cast to class com.google.auth.oauth2.IdTokenProvider (com.google.auth.oauth2.UserCredentials and com.google.auth.oauth2.IdTokenProvider are in unnamed module of loader 'app')
const {GoogleAuth} = require('google-auth-library');
const auth = new GoogleAuth()
const client = await auth.getIdTokenClient(url);
const res = await client.request({url});
console.log(res.data);
Error: Cannot fetch ID token in this environment, use GCE or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to a service account credentials JSON file.
at GoogleAuth.getIdTokenClient(....)
gcloud auth activate-service-account-key-file
只适用于运行gcloud命令的“您”,而不是需要google_application_credentials
的“应用程序”。
从java调用Google Cloud Run或如何从Cloud Run/gcp的外部调用Cloud Run?中可以看到,您要么需要有服务帐户的JSON密钥文件,要么必须在gce/gke/Cloud Run/App Engine/gcf实例中运行。
为了在本地环境中工作,我建议使用gcloud auth application-default login
命令登录(该命令的工作方式与本地设置google_application_credentials
类似)。如果这管用就告诉我。
如果这不起作用,作为最后的手段,您可以重构代码,以便在本地工作时从环境变量(如果设置了)中提取标识令牌,例如:
$ export ID_TOKEN="$(gcloud auth print-identity-token -q)"
$ ./your-app
根据纪尧姆的请求“这个gcloud auth print-identity-token
如何使用我的个人Google凭据”?
>
gcloud
是一个注册到Google的OAuth客户端,要获得JWT令牌,您需要在GCE/gcf/gke/gae/cr环境中工作,或者有一个OAuth应用程序。
GCloud
发出如下请求:
POST https://www.googleapis.com/oauth2/v4/token
带身体:
grant_type=refresh_token&client_id=REDACTED.apps.googleusercontent.com&client_secret=REDACTED&refresh_token=REDACTED
对于我们来说,client_id
和client_secret
值很可能是相同的,因为它们是GCloud的。但是,它会将refresh_token
与一个新令牌交换。
/token
响应将包含access_token
和id_token
。例如:
{
"access_token": ".....",
"id_token": "eyJhbG....."
"expires_in": 3599,
"scope": "https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/accounts.reauth openid",
"token_type": "Bearer",
}
这就是GCloud
为您打印标识令牌的方式。
如果您想知道代码是如何使用JSON密钥文件的,您将看到非常类似的内容。例如,在Go中有http://google.golang.org/api/idToken包,您将在那里看到类似的实现。
这是服务到服务身份验证中概述的规则的一个例外吗?该规则规定需要设置为接收服务的url(例如https://xxxxx.run.app)。和是一回事吗? 最后,除了使用googlecloudsdk(即imaging不存在)之外,是否还有其他方法使用用户帐户而不是服务帐户进行身份验证?
我目前正在进行一个项目,该项目将自动设置一个新的Firebase/GCloud项目。它在很大程度上依赖于Firebase CLI和gcloud SDK,这些SDK具有几个强制步骤的用户凭据。 我现在正在尝试将这个项目移动到云运行的Docker容器中。我已经能够使用Firebase CLI的内置基于令牌的CI命令,使用用户凭据对其进行身份验证。 我想问一下是否可以使用类似的方法对gcloud SDK
我正在构建一个需要读取普通Gmail收件箱(不是域的一部分)的Web服务。 代码: 错误: 我看不出这有什么原因不起作用,但读完这篇文章后,你似乎不能在个人@gmail帐户上使用服务帐户凭据。有谁知道这是真的还是我做错了什么? 感谢您的帮助! 更新 如果我将更改为,我可以查看邮件,但无法修改标签,这是我的要求。
云用户组对应公有云上的用户组,通过用户组可以对职责相同的用户进行分类并授权等。 云用户组对应公有云上的用户组,通过用户组可以对职责相同的用户进行分类并授权等。 同步规则 从本地到云上:在本地创建的云用户组关联云用户时,将会同步到对应公有云平台,并创建一条缓存记录,即本地与云上的映射关系。在本地修改云用户组权限时,将会同步到公有云平台。 从云上到本地:当平台添加公有云账号时,将会把公有云上的用户组同
问题内容: 我刚刚为Firebase实施了新的Cloud Functions,但是日志中有些东西让我感到困扰: 未配置结算帐户。无法访问外部网络,并且配额受到严重限制。配置计费帐户以消除这些限制 我实际上设法从外部网络访问该功能,所以我想知道我是否真的必须提供计费帐户?Firebase文档中对此没有任何内容。 我将Spark订阅计划用于个人测试,并且如果我不打算支付任何费用,则不想添加账单信息。
我刚刚为Firebase实现了新的云功能,但日志中有一些让我烦恼的地方: 未配置账单帐户。外部网络无法访问,配额受到严格限制。配置帐单帐户以删除这些限制 我实际上设法从外部网络访问了该功能,所以我想知道我真的必须给我的账单帐户吗?firebase文件里没有这方面的内容。 我使用Spark订阅计划用于个人测试目的,如果我还不打算支付任何费用,我不想添加账单信息。