Как разделить внешний и внутренний интерфейс для единого входа на основе Oauth2?

Spring Cloud

mark

1. Описание

Как следует из названия, единый вход означает, что в системах с несколькими приложениями вам нужно войти в систему только один раз, чтобы получить доступ к другим взаимно доверенным системам приложений, избегая проблем с несколькими входами в систему; эта статья в основном знакомитперекрестный доменмежду前后端分离Как проект реализует единый вход и非前后端分离где разница? Какую проблему необходимо решить? .

Переднее и заднее разделениеОсновная концепция заключается в том, что серверная часть возвращает только данные, необходимые интерфейсу, и больше не отображает HTML-страницу. HTML-страница интерфейса вызывает интерфейс RESTFUL API серверной части через AJAX и использует данные JSON для взаимодействия.

PSвойтиОсновные идеи и принципы реализации смотрите в статье "Как работает единый вход Spring Security на основе Oauth2? Аннотация делает это

 

2. Осознайте разницу

перекрестный доменмеждуПереднее и заднее разделениеПроект также основан на Shared Unified Authorization Service (UAA)cookieреализоватьвойти, но сНеобратимое разделениеОтличие в том, что необходимо решить следующие проблемы

  1. Нет фильтра/перехватчика, вам нужно судить о статусе входа в систему на внешнем интерфейсе.
  2. нужно реализоватьoauth2изРежим кода авторизацииЛогика взаимодействия
  3. Необходимо решить вопросы безопасности,oauth2изclientSecretНебезопасно размещать параметры во внешнем интерфейсе

 

3. Архитектура реализации

НижеПереднее и заднее разделениеМежду тремя ролями проекта (интерфейсный веб-проект, серверный проект API, центр авторизации UAA)Авторизоваться/войтиДиаграмма архитектуры логики взаимодействия

file

Принцип междоменного единого входасуществует"Как работает единый вход Spring Security на основе Oauth2? Аннотация делает это«Это уже было введено, и я не буду объяснять это здесь.

Есть несколько моментов, на которые стоит обратить внимание в front-end WEB проекте:

  1. красные линииперейти для перенаправления
  2. Фронтенд-инжинирингДоступен благодаря наличию или отсутствиюaccess_tokenОпределить статус входа
  3. Фронтенд-инжинирингПрыгатьUAAПрежде вам нужно записать адрес страницы, которую посещает пользователь, чтобы вы могли перенаправить обратно после завершения входа в систему.

PS:Зачемполучить access_tokenНужно запросить завершение внутреннего проекта API вместо того, чтобы сам внешний веб-проект напрямую запрашивал UAA? потому чтопроблемы с безопасностью! Этот шаг требуетclientSecretПараметр, и настройка этого параметра через фон не должна быть выставлена ​​на внешний интерфейс.

 

В-четвертых, полный адрес загрузки демоверсии

git ee.com/ Эти два дня по 2000/м…

  Отсканируйте код, чтобы следовать за сюрпризом!

file