##// END OF EJS Templates
Added tag v1.0.0 for changeset 7110eac54b19
Added tag v1.0.0 for changeset 7110eac54b19

File last commit:

r0:7110eac54b19 v1.0.0 default
r1:8b476fada8c1 default
Show More
SecurityHandler.js
56 lines | 3.3 KiB | application/javascript | JavascriptLexer
/**
* Обработчик системы безопасности, встраивается в стек обработки запросов и
* контролирует процесс создания контекста безопасности регистрирует в запросе
* сервис с именем 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;
});
}
});
});