【发布时间】:2022-08-05 21:30:55
【问题描述】:
我正在尝试从 java 连接到云功能,例如 https://us-west1-<>.cloudfunctions.net,并且我正在尝试使用如下代码为该功能生成不记名令牌:
String audience = https://<projectname>-<region>-<projectid>.cloudfunctions.net/<myFunction>;
GoogleCredentials credentials = GoogleCredentials
.getApplicationDefault()
.createScoped(Arrays.asList(\"https://www.googleapis.com/auth/cloud-platform\"));
IdTokenCredentials tokenCredential =
IdTokenCredentials.newBuilder()
.setIdTokenProvider((IdTokenProvider) credentials)
.setTargetAudience(audience)
.build();
tokenCredential.refresh();
String token = tokenCredential.getIdToken().getTokenValue();
当我运行应用程序时,会生成令牌。但是如果我把令牌放在邮递员身上,服务器会返回 401 错误:401未经授权.
如果我在 GCP 云 shell 终端中使用 GCP 命令“gcloud auth print-identity-token”并在邮递员中使用此令牌,则云函数调用成功。
用于获取凭证的 Json 文件类似于:
{
\"type\": \"service_account\",
\"project_id\": \"<project_id>\",
\"private_key_id\": \"<private_key_id>\",
\"private_key\": \"-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----\\n\",
\"client_email\": \"aaa@<project_id>.iam.gserviceaccount.com\",
\"client_id\": \"<client_id>\",
\"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",
\"token_uri\": \"https://oauth2.googleapis.com/token\",
\"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",
\"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/<principle>\"
}
请帮助我弄清楚如何在 Java 中生成不记名令牌以调用谷歌云功能。
谢谢
-
使用
gcloud auth print...,您可以使用专用于 GCLOUD CLI 的gcloud auth login凭据。当您使用代码时,您使用 ADC:GOOGLE_APPLICATION_CREDENTIALSenv var(如果已设置)或命令的凭据gcloud auth application-default login。检查您的凭据,然后重试。 -
谢谢@guillaumeblaquiere 的建议。我的问题是由于我为观众使用的值不正确。当我给出正确的受众价值时,它就修复了。请参阅我的回答,了解我给出的受众价值。
标签: google-cloud-functions serverless