Служба Spring Boot REST - аутентификация конечного пользователя против аутентификации APP (клиент REST) - PullRequest
2 голосов
/ 08 марта 2019

Я просмотрел много постов и статей, но не нашел простого решения для случая, ниже которого я должен реализовать.

Платформа: Spring Boot 2.x.x (Spring Security 5.x.x) с встраиванием Tomcat

Решение: Служба REST, которая использует много клиентских приложений и множество конечных пользователей.

  1. Я должен реализовать конечную точку REST /api/search, которая доступна для многих клиентских приложений. В качестве примера можно привести веб-приложение APP-X (Angular), веб-приложение APP-Y (Jquery / Bootstrap) и мобильное приложение APP-Z (IOS). Все три клиента являются отдельными лицами (как с технической точки зрения, так и с точки зрения бизнеса).

  2. Так что я должен аутентифицировать вышеуказанное приложение, используя одноразовый токен. Поэтому я планировал перейти на Spring OAuth2, включив @EnableAuthorizationServer и @EnableResourceServer. Для каждого клиента приложения я сгенерирую токен, и они смогут использовать его при подключении к моей службе REST. Является ли этот подход правильным?

  3. Помимо клиентских приложений, система имеет возможность регистрации и входа в систему для конечных пользователей. Также моя конечная точка (/api/search) может получить доступ как к анонимным пользователям, так и к пользователям, которые зарегистрированы под ролью ROLE_REGUSER. А через контекст безопасности мне нужно получить доступ к данным пользователя, как при обычной аутентификации пользователя.

  4. Это место, где я застрял. Как я могу обрабатывать следующие моменты вместе, используя Spring Security 5.x.x (Spring Boot 2.x.x).

I. И клиентские приложения, и аутентификации конечных пользователей.
II. Разрешить доступ для анонимных пользователей и зарегистрированных пользователей для одной и той же конечной точки.

Я приложил небольшую диаграмму для уточнения вышеописанного сценария.

Спасибо

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...