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