|
|
/**
|
|
|
* Обработчик системы безопасности, встраивается в стек обработки запросов и
|
|
|
* контролирует процесс создания контекста безопасности регистрирует в запросе
|
|
|
* сервис с именем session.
|
|
|
*
|
|
|
* Для получения и создания контекста безопасности используется
|
|
|
* SecurityAuthority которое отвечает за механизмы проверки подлинности и
|
|
|
* доверенность полученной сессии, по сути SecurityAuthority реализует протокол
|
|
|
* безопасности.
|
|
|
*
|
|
|
* При первом доступе к сервисам возможна прозрачная аутентификация, при этом
|
|
|
* создается новая сессия, для ее создания используется IdentityProvider.
|
|
|
* IdentityProvider - внешний модуль аутентификации, который по требованию
|
|
|
* предоставляет идентификатор пользователя, используя собственные механизмы.
|
|
|
*
|
|
|
* После получения данных аутентификации от IdentityProvider они используются в
|
|
|
* SecurityAuthority для создания сессии.
|
|
|
*
|
|
|
* Многоэтапная аутентификация сессии - случай пока чисто теоретический, оданко,
|
|
|
* в случае необходимости SecurityAuthtority вызывает исключение при получении
|
|
|
* сесии, если требуется следующий этап аутентификации сессии, данное исключение
|
|
|
* прерывает текущую обработку запроса и попадает в обработчик
|
|
|
* SecurityAuthority.handleError который в свою очередь формирует ответ сервера
|
|
|
* для продолжения аутентификации.
|
|
|
*/
|
|
|
define([ "dojo/_base/declare", "dojo/when"],
|
|
|
function(declare, when) {
|
|
|
|
|
|
return declare(null, {
|
|
|
constructor : function(/*options*/) {
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
* Точка входа в обработчик, вызывается инфраструктурой при
|
|
|
* обработке запроса.
|
|
|
*
|
|
|
* @req Текущий запрос.
|
|
|
* @next Следующий обработчик в цепочке, вызывается когда сессия уже
|
|
|
* зарегистрирована в локаторе.
|
|
|
* @async
|
|
|
*/
|
|
|
invoke : function(req, next) {
|
|
|
let authority = req.getService("securityAuthority");
|
|
|
return when(next(), function(resp) {
|
|
|
if (authority)
|
|
|
return authority.completeRequest(resp);
|
|
|
return resp;
|
|
|
}, function(err) {
|
|
|
if (authority)
|
|
|
return authority.handleError(err);
|
|
|
else
|
|
|
throw err;
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
|