1. Описание
Как следует из названия, единый вход означает, что в системах с несколькими приложениями вам нужно войти в систему только один раз, чтобы получить доступ к другим взаимно доверенным системам приложений, избегая проблем с несколькими входами в систему; эта статья в основном знакомитперекрестный доменмежду前后端分离
Как проект реализует единый вход и非前后端分离
где разница? Какую проблему необходимо решить? .
Переднее и заднее разделениеОсновная концепция заключается в том, что серверная часть возвращает только данные, необходимые интерфейсу, и больше не отображает HTML-страницу. HTML-страница интерфейса вызывает интерфейс RESTFUL API серверной части через AJAX и использует данные JSON для взаимодействия.
PS:овойтиОсновные идеи и принципы реализации смотрите в статье "Как работает единый вход Spring Security на основе Oauth2? Аннотация делает это》
2. Осознайте разницу
перекрестный доменмеждуПереднее и заднее разделениеПроект также основан на Shared Unified Authorization Service (UAA)cookieреализоватьвойти, но сНеобратимое разделениеОтличие в том, что необходимо решить следующие проблемы
- Нет фильтра/перехватчика, вам нужно судить о статусе входа в систему на внешнем интерфейсе.
- нужно реализоватьoauth2изРежим кода авторизацииЛогика взаимодействия
- Необходимо решить вопросы безопасности,oauth2изclientSecretНебезопасно размещать параметры во внешнем интерфейсе
3. Архитектура реализации
НижеПереднее и заднее разделениеМежду тремя ролями проекта (интерфейсный веб-проект, серверный проект API, центр авторизации UAA)Авторизоваться/войтиДиаграмма архитектуры логики взаимодействия
Принцип междоменного единого входасуществует"Как работает единый вход Spring Security на основе Oauth2? Аннотация делает это«Это уже было введено, и я не буду объяснять это здесь.
Есть несколько моментов, на которые стоит обратить внимание в front-end WEB проекте:
- красные линииперейти для перенаправления
-
Фронтенд-инжинирингДоступен благодаря наличию или отсутствию
access_token
Определить статус входа - Фронтенд-инжинирингПрыгатьUAAПрежде вам нужно записать адрес страницы, которую посещает пользователь, чтобы вы могли перенаправить обратно после завершения входа в систему.
PS:Зачемполучить access_tokenНужно запросить завершение внутреннего проекта API вместо того, чтобы сам внешний веб-проект напрямую запрашивал UAA? потому чтопроблемы с безопасностью! Этот шаг требуетclientSecretПараметр, и настройка этого параметра через фон не должна быть выставлена на внешний интерфейс.
В-четвертых, полный адрес загрузки демоверсии
git ee.com/ Эти два дня по 2000/м…
Отсканируйте код, чтобы следовать за сюрпризом!