У меня есть ряд микросервисов в GCP Cloud Run, на каждом из которых размещена федеративная служба Apollo GraphQL. Затем у меня есть последний контейнер, который действует как федеративный шлюз GraphQL для остальных сервисов.
Это отлично работает, когда для контейнеров включен общий доступ, но я не могу заставить сервер шлюза аутентифицироваться в отношении двух других служб.
Я попытался использовать Apollo RemoteGraphQLDataSource и реализовать метод willSendRequest для установки необходимых заголовков.
Я также попытался добавить роль инициатора облачного запуска к роли службы, от имени которой работает шлюз.
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 })
Я ожидаю, что сервер шлюза сможет аутентифицироваться против других микросервисов.