Я работал над созданием платформы, использующей архитектуру микросервисов с шлюзом API. Один вопрос, на котором я застрял, заключается в том, как заставить шлюз API обрабатывать как аутентифицированные, так и неаутентифицированные конечные точки.
Вот упрощенная и грубая схема системы, о которой я думаю
Для моей системы я буду использовать Auth0, и я думаю, что хочу, чтобы сервис проверял, действителен ли токен, используя открытый ключ, вместо того, чтобы шлюз делал Это. Это дает мне больше гибкости, если я хочу когда-нибудь сделать один из своих сервисов общедоступным. И я думаю, что хочу, чтобы мой шлюз был маленьким.
Но как шлюз будет обрабатывать смесь как аутентифицированных, так и неаутентифицированных конечных точек? т.е. Я хочу сделать конечную точку GET «открытой», а конечная точка POST требует входа в систему. Какой объект должен управлять тем, является ли конечная точка «открытой» или «требует входа в систему», шлюзом или службой?
- Должен ли я всегда, чтобы шлюз передавал запрос в службу, независимо от того, вошел ли пользователь в систему или нет, и чтобы служба возвращала 401?
- Или шлюз должен содержать некоторую логику о том, какие конечные точки требуют входа в систему, и возвращать 401, если в запросе нет токена? Полный пропуск сервиса.