出身背景
在Google Kubernetes引擎上,我们一直在使用云endpoint和可扩展服务代理(v2)进行服务到服务的身份验证。
这些服务通过在HTTP请求的授权
头中包含承载JWT令牌来进行身份验证。
服务的标识已通过GCP服务帐户维护,并且在部署期间,Json服务帐户密钥被挂载到容器的预定义位置,该位置被设置为GOOGLE_APPLICATION_CREDENTIALS
env var的值。
这些服务是在C#和ASP. NET Core中实现的,为了生成实际的JWT令牌,我们使用Google Cloud SDK(https://github.com/googleapis/google-cloud-dotnet和https://github.com/googleapis/google-api-dotnet-client),其中我们调用以下方法:
var credentials = GoogleCredential.GetApplicationDefault();
如果GOOGLE_APPLICATION_CREDENTIALS
被正确地设置为服务帐户密钥的路径,那么这将返回一个ServiceAcCountCredential
对象,我们可以在该对象上调用GetAccessTokenForrecestAsync()
方法,该方法返回实际的JWT令牌。
var jwtToken = await credentials.GetAccessTokenForRequestAsync("https://other-service.example.com/");
var authHeader = $"Bearer {jwtToken}";
这个过程一直在正常工作,没有任何问题。
情况是,我们正在从使用手动维护的服务帐户密钥迁移到使用工作负载标识,我不知道如何正确使用Google Cloud SDK来生成必要的JWT令牌。
问题
当我们在容器中启用工作负载标识时,不装载服务帐户密钥文件,也不设置GOOGLE_应用程序_凭据
env var,然后设置GoogleCredential。GetApplicationDefault()
调用返回一个ComputeCredential
而不是ServiceAccountCredential
如果我们调用GetAccessTokenForRequestAsync()
方法,它将返回一个不是JWT格式的令牌。
我检查了实现,令牌似乎是从元数据服务器检索到的,其中预期的响应格式似乎是标准的OAuth 2.0模型(在此模型类中表示):
{
"access_token": "foo",
"id_token": "bar",
"token_type": "Bearer",
...
}
而GetAccessTokenForRequestAsync()
方法返回access\u token
的值。但据我所知,这不是JWT令牌,事实上,当我尝试使用它对ESP进行身份验证时,它的响应是
{
"code": 16,
"message": "JWT validation failed: Bad JWT format: Invalid JSON in header",
..
}
据我所知,通常id_token
包含JWT令牌,它应该可以通过Token响应
对象的IdToken
属性访问,也可以通过SDK访问,我尝试这样访问它:
var jwtToken = ((ComputeCredential)creds.UnderlyingCredential).Token.IdToken;
但这会返回null
,因此元数据服务器显然不会返回id_令牌
字段中的任何内容。
问题
使用JWT令牌的正确方式是什么。NET Google Cloud SDK,用于在GKE中使用工作负载标识时访问ESP?
要获得附加服务号的IdToken,可以使用GoogleCredential。默认值。GetOidcTokenAsync(...)
。
问题内容: 我无法在Google Container Engine中使用“应用程序默认凭据”。这些文档说,它们是为App Engine和Compute Engine设计的,但是有人告诉我,它们应该透明地传递给在Container Engine上运行的容器。 这是失败的代码: 失败的错误: 期望Application Default Credentials与Container Engine一起使用是
我正在App Engine上评估一个Quarkus应用程序。该应用程序需要一个基于Cloud SQL的Postgres DB,我将该实例命名为“quarkus”。 但是我遇到了这些访问错误:无权访问实例:addlogic-foodiefnf-1:quarkus Service account:addlogic-foodiefnf-1 @ app spot . gserviceaccount . c
我在docker容器中运行gunicorn flask服务,并使用Google容器引擎。我在下面的教程中设置了集群http://kubernetes.io/docs/hellonode/ 环境变量在Kubernetes集群中始终包含一个内部地址。我要找的是HTTP_X_FORWARDED_for,但请求头中缺少它。是否可以将服务配置为在请求中保留外部客户端ip?
Google Cloud Platform已经引入了身份感知代理,以保护应用引擎灵活环境实例免受公共访问。 然而,尚不完全清楚这是否可以或应该从访问GAE托管APIendpoint的谷歌云函数中使用。 文档(包括Python和Java示例)显示了一个IAP身份验证工作流,包括1)生成JWT令牌,2)创建OpenID令牌,3)然后使用头向Google App Engine提交请求。 如果每次调用函数
我试图在我的云功能中访问Firebase云存储,但我一直在云功能日志中出现以下错误: 下面是我的代码: const admin=需要('Firebase-admin'); const函数=需要('Firebase-函数'); 下面是我的包中的依赖项。json: PS:我在星火计划上