У меня есть реализация Apollo Server, которая взаимодействует с несколькими нашими внутренними API. Все операции ограничены для publi c, и для получения токена необходима мутация входа в систему. Тем не менее, мутация входа в систему не обязательно должна иметь токен в заголовках, так как она будет точкой входа для всех клиентов GralhQL.
const server = new ApolloServer({
typeDefs,
resolvers,
context: async ({
event,
context
}: {
event: APIGatewayProxyEvent;
context: any;
}) => {
const { Authorization, OAuthId, OAuthSecret } = event.headers;
// if (!Authorization || !OAuthId || !OAuthSecret) {
// throw new AuthenticationError('Unauthorized');
// }
const session = await SessionStore.get(Authorization);
// if (!session) {
// throw new AuthenticationError('Unauthorized');
// }
return {
Authorization,
OAuthId,
OAuthSecret,
session
};
},
dataSources,
playground: true
});
Моя проблема в том, что если я включу приведенный выше код с комментариями, он заблокирует все поступает запрос, и никто не сможет войти в систему (у меня есть loginResolver, отвечающий за аутентификацию пользователей и установку токенов / сессий)
Теперь, если я переместу эту аутентификацию, проверьте logi c в все распознаватели не масштабируемы, так как у нас наверняка будет 100 или более распознавателей.
В любом случае я могу внести в белый список мою указанную мутацию c и все другие операции должны go через эту проверку аутентификации ?
Я использую apollo-server-lambda
.
Я открыт для любого масштабируемого решения.
Спасибо,