首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GCP Cloud Run上针对联合GraphQL服务进行身份验证?

如何在GCP Cloud Run上针对联合GraphQL服务进行身份验证?
EN

Stack Overflow用户
提问于 2019-07-02 04:07:27
回答 1查看 513关注 0票数 1

我在GCP Cloud Run上有一系列微服务,每个微服务都托管一个联合的Apollo GraphQL服务。然后,我还有最后一个容器,它充当其余服务的联合GraphQL网关。

当容器上启用了公共访问时,这可以很好地工作,但是我不能让网关服务器对其他两个服务进行身份验证。

我已经尝试使用Apollo RemoteGraphQLDataSource并实现willSendRequest方法来设置必要的标头。

我还尝试将云运行调用者角色添加到网关作为的服务角色。

代码语言:javascript
复制
const servicex = new RemoteGraphQLDataSource({
  url: serviceurl,
  willSendRequest({ request, context }) {
    request.http.headers.set(
      "Authorization",
      "Bearer ${TOKEN}"
    );
  }
});


const gateway = new ApolloGateway({
  serviceList: [
    servicex
  ]
});

const { schema, executor } = await gateway.load();

const server = new ApolloServer({ schema, executor })

我希望网关服务器能够针对其他微服务进行身份验证。

EN

回答 1

Stack Overflow用户

发布于 2019-07-02 04:21:42

云运行授权需要在您的authorization: bearer TOKEN HTTP头中有一个HTTP2.0身份令牌。一个常见的错误是使用访问令牌。

除非您在部署命令中指定了新的服务帐户,否则Cloud Run将使用Compute Engine默认服务帐户作为其标识。这意味着您需要指定role/run.Invoker的服务帐户电子邮件地址。

使用OAuth对用户凭据进行授权时,您可以收到三个令牌:访问令牌、刷新令牌和身份令牌,具体取决于您在Scopes参数中指定的内容。身份令牌是您在HTTP Authorization标头中使用的令牌。

当您使用服务帐户身份对服务进行授权时,请调用Cloud Run元数据服务器为您创建令牌。此终结点将返回身份令牌。在HTTP Authorization标头中使用返回的令牌。

代码语言:javascript
复制
http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=<ususally-the-url-of-the-cloud-run-service-you-are-calling>

返回的令牌是您可以解码的带签名的JWT。header.payload.signature的典型base64编码。有效负载包含服务帐户的电子邮件地址,此电子邮件地址是Cloud Run代理用于授权的地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56841825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档