Авторизация микросервисов. Как запретить пользователю с действующим JWT доступ к ресурсам других пользователей? - PullRequest
1 голос
/ 07 мая 2020

У меня есть несколько микросервисов без сохранения состояния за шлюзом API, и я хочу убедиться, что пользовательский запрос, содержащий действительный токен авторизации JWT, не может получить доступ к ресурсам других пользователей.

В настоящее время мой шлюз API проверяет только то, что срок действия JWT не истек и он действителен.

Чтобы предотвратить запрос пользователя с допустимыми ресурсами доступа JWT других пользователей, я собирался использовать Spring Method Level Security и проверять, совпадает ли идентификатор основного пользователя с userId в пути URL-адреса запроса. Но это означает, что в каждом микросервисе мне нужно добавить Spring Security, создать фильтр авторизации и создать контекст безопасности на основе информации, которую я прочитал из JWT. Мне нужно будет воссоздать контекст безопасности Spring в каждом отдельном микросервисе.

Это правильный способ сделать это? Если нет, то как еще можно предотвратить запрос пользователя, содержащий действительный JWT, на доступ к ресурсам других пользователей?

Посоветуйте, пожалуйста.

1 Ответ

2 голосов
/ 08 мая 2020

Как вы с этим справляетесь, обычно правильный подход. Чтобы каждая служба оставалась отделенной от других, важно, чтобы она могла определять, какие методы / конечные точки заботятся о пользовательской области, а какие нет. Больше правил и logi c в шлюзе означает больше ограничений на то, что могут делать отдельные службы.

При этом, если у вас есть глобально предсказуемые правила, которые применяются ко всем службам, у вас есть возможность поместить logi c в шлюз. Что-то вроде проверки JWT является примером такого правила, которое достаточно стандартизировано, чтобы вы могли делать предположения о том, что базовые службы хотели бы делать с токеном после его получения (проверить его). Если у вас есть правило, которое можно безопасно применить глобально, вы можете извлечь его из служб и поместить в шлюз. В противном случае вам лучше будет немного дублировать, чтобы не создавать препятствий, которые мешали бы службам обрабатывать ввод по-другому.

...