Общие сведения

Mellophone — компонент платформы КУРС, специализированно решающий задачи аутентификации, кросс-доменной аутентификации, интеграции с различиными провайдерами аутентификации.

Загрузить дистрибутив платформы Course Orchestra

Стабильные сборки

Постановка задачи

Предположим, что на разных доменах (к примеру, www.domain-1.ru и www.domain-2.ru) развёрнуты разные веб-приложения.

Тот факт, что эти приложения развёрнуты на разных доменах, означает, что наборы сохраняемых браузером куков каждого из приложений индивидуальны и полностью изолированы друг от друга. То есть запрос на показ веб-страницы для приложения не будет содержать никаких данных о том, что пользователь был и авторизовывался ранее в каких-либо других приложениях.

Задача состоит в том, чтобы организовать общую авторизацию между несколькими веб-приложениями, то есть построить систему, благодаря которой пользователь, выполнивший аутентификацию в любом веб-приложении, при входе во все другие приложения также оказывался бы аутентифицирован, а при потере аутентификации в любом из приложений также переставал бы быть аутентифицированным для всех остальных приложений. За реализацию этого механизма отвечает сервер аутентификации, который может находиться на домене, отличающемся от доменов любого из приложений (к примеру, находиться в домене www.authentication-domain.ru), к нему за информацией должны обращаться как пользователь из браузера, так и напрямую взаимодействующие приложения (см. схему далее по тексту).

Для работоспособности этой схемы пользовательские браузеры должны поддерживать т. н. «сторонние куки».

Применяемые термины

  • В этом руководстве используется слово «аутентификация», означающее проверку «свой-чужой». Это слово следует отличать от слова «авторизация», означающее проверку, какими правами наделён «свой». Мы говорим только о системе аутентификации. Описываемая здесь система ничего не знает о ролях и правах аутентифицированного пользователя и не занимается ими.

  • Провайдером аутентификации мы будем называть систему, которая по паре «логин/пароль» может выдать ответ «свой/чужой». Mellophone поддерживает работу со следующими типами провайдеров аутентификации:

    • LDAP в одном из двух вариантов:

      • Microsoft Active Directory ,

      • Apache DS (по протоколу LDAP),

    • Текстовый файл в формате XML,

    • База данных,

    • HTTP-сервер.

  • Общая для всех приложений сессия аутентификации имеет «идентификатор сессии аутентификации», отличный от «идентификатора сессии приложения». У каждого веб-приложения имеется свой (известный только самому этому приложению и серверу аутентификации) идентификатор сессии приложения. Он хранится в куки, выставляемой на домен приложения. Идентификатор сессии аутентификации известен только самому серверу аутентификации и хранится в стороннем куки, выставленном на домен сервера аутентификации. Одному идентификатору сессии аутентификации может соответствовать какое угодно количество идентификаторов сессий приложений. Одному идентификатору сессии приложения может соответствовать ноль, означающий, что идентификатор сессии приложения не аутентифицирован, или единица, означающая, что идентификатор сессии приложения аутентифицирован и является идентификатором активной сессии аутентификации. Таблицу соответствия между идентификаторами сессий приложения и идентификаторами активных сессий аутентификации хранит сервер аутентификации.

В некоторых случаях (для обеспечения дополнительной информационной защиты) приложению может понадобиться сменить идентификатор сессии приложения. Для отражения этого факта в Mellophone имеется специальный сервлет /changeappsesid.

Компоненты решения задачи

Для решения задачи применяются следующие составляющие:

  • Сервер аутентификации (Mellophone), на котором экспонированы:

    • сервлеты, обслуживающие прямые запросы с серверов веб-приложений;

    • один сервлет, обслуживающий запросы от клиентских браузеров, поступающих в виде запросов на отображение фрейма или картинки на странице веб-приложения.

  • Протокол, по которому любое веб-приложение может взаимодействовать с сервером аутентификации для обеспечения общей аутентификации. ##