Можливість запуску БП за прямим посиланнями для надавачів і отримувачів послуг

Загальний опис

Існує необхідність реалізувати можливість входу до кабінетів з подальшим призначенням необхідної ролі даному користувачу.

Функціональні сценарії

  • Вхід до кабінету за посиланням і запуск бізнес-процесу для автоматизованого розподілення ролей.

Ролі користувачів

  • Моделювальник

  • Надавач послуг

  • Отримувач послуг

Глосарій та акроніми

Пряме посилання на бізнес-процес — посилання для запуску бізнес-процесу через GET запит та можливості передачі даних стартової форми у посиланні.

Загальні принципи та положення

  • Надання ролей відбувається за допомогою бізнес-процесу.

  • Задля запобігання безконтрольного запуску бізнес-процесів, автоматичний старт не відбувається, а відбувається перехід на стартову форму з можливістю їх предзаповнення.

  • Створення користувача для надавачів послуг при першому вході налаштовується окремо за допомогою наявного механізму.

  • Бізнес-процеси для зміни ролей рекомендовано розробляти ідемпотентними.

  • Доступність бізнес-процесу для виклику регулюється наявними механізмами.

  • Використання прямих посилань та онбордінг процес можуть використовуватись незалежно так і разом в рамках реєстру, доки задовільняються чинні обмеження використння онбордінг процесу.

  • Прямі посилання можуть бути побудовано до будь-якого доступного для користувача бізнес-процесу.

Високорівневий дизайн рішення

В порталах при переході на стартову форму бізнес-процесу за посиланням для не автентифікованих користувачів, після автентифікації користувач перенаправляється на стартову форму.

В порталах існує окремий шлях (route) через який можна передати ідентифікатор БП через параметр в посиланні (path parameters) та передати дані стартової форми при наявності через параметри запиту (query parameters).

Загальний шаблон побудови прямого посилання до бізнес-процесу для надавачів послуг
https://officer-portl.base-url/officer/process-list/${business-process-key}/start-form?data=${data}
Загальний шаблон побудови прямого посилання до бізнес-процесу для отримувачів послуг
https://citizen-portl.base-url/process-list/${business-process-key}/start-form?data=${data}
Назва параметра Опис

business-process-key

Рядок, унікальний ідентифікатор бізнес-процесу (ОБОВ’ЯЗКОВИЙ)

data

Base64 представлення JSON структури для стартової форми процесу (ОПЦІЙНИЙ)

Відмінності у поведінці між кабінетами нема, єдина відмінність це різні шляхи для побудови прямих посилань. Тому далі в дизайні розглядається все на прикладі надавачів послуг.

При переході за таким посиланням користувача буде перенаправлено на стартову форму з можливістю її предзаповнення.

bp url visual

Низькорівневий дизайн сервісів

Ключові сценарії

Повернення користувача за посиланням з якого він прийшов після автентифікації.

В поточній реалізації після успішної автентифікації користувач завжди перенаправляється на стартову сторінку і у випадку якщо користувач використав посилання на внутрішній захищений ресурс, то ця інформація не зберігається.

Розширення API для сторінки /home опційним параметром rewrite_redirect_url

Diagram
Приклад коду OIDC-плагіну
local function make_oidc(oidcConfig)
  ngx.log(ngx.DEBUG, "OidcHandler calling authenticate, requested path: " .. ngx.var.request_uri)

-- Отримання query parameter redirect_url з /home і прокидання цього параметру до kong oidc plugin/resty.openidc бібліотеки

  local res, err, target_url = require("resty.openidc").authenticate(oidcConfig, nil, oidcConfig.unauth_action, oidcConfig.session_opts)
  if err then
    ngx.log(ngx.DEBUG, "OidcHandler error: " .. err)
    if err == "unauthorized request" then
      ngx.log(ngx.INFO, "OidcHandler unauthorized request to " .. target_url)
      utils.exit(ngx.HTTP_UNAUTHORIZED, err, ngx.HTTP_UNAUTHORIZED)
    end
    if oidcConfig.recovery_page_path then
      ngx.log(ngx.DEBUG, "Entering recovery page: " .. oidcConfig.recovery_page_path)
      ngx.redirect(oidcConfig.recovery_page_path)
    end
	  ngx.log(ngx.DEBUG, "Error while requesting " .. ngx.var.request_uri)
    utils.exit(500, err, ngx.HTTP_INTERNAL_SERVER_ERROR)
  end
  return res
end