Загальна інформація
Функціонал взаємодії акредитованих Майданчиків із ЦБД
Отримання токена доступу
Після проходження акредитації, Брокеру надається унікальний Авторизаційний ключ (Authorization token). Цей токен виступає інструментом ідентифікації Брокера та розширює його можливості взаємодії з ЦБД. Передбачена можливість взаємодіяти тільки з обʼєктами, на які надані права.Розширені можливості API для акредитованих брокерів
Використовуючи отриманий токен, брокери можуть:- Публікувати об'єкти: надсилати запит для створення нових об'єктів у ЦБД, таких як procedure, asset та інші
- Модифікувати існуючі об'єкти: змінювати раніше опубліковані об'єкти, якщо вони ще не набули термінального статусу відповідно до правил ЦБД і існуючих endPoints.
Безпека та авторизація
Токен є обов’язковою складовою кожного запиту до API, який стосується створення чи зміни об'єктів. Це забезпечує:- Унікальність доступу до даних конкретного брокера.
- Обмеження доступу до функціоналу відповідно до рівня акредитації (прав доступу до обʼєктів).
- Логування усіх дій у ЦБД для аудиту та прозорості.
Додаткові обмеження
- Брокери можуть працювати лише з тими об'єктами, які були створені з використанням їх токена, або якщо вони отримали owner token до раніше створеного обʼєкта + їх Авторизаційний ключ дозволяє виконувати дії над обʼєктам вказаного типу.
- Токен може бути деактивований або вимагати регулярного оновлення для посилення безпеки доступу.
Мета функціоналу:
Цей механізм забезпечує контрольований, прозорий та безпечний доступ до ресурсів ЦБД, дозволяючи розширювати свій функціонал для Брокера, але залишаючи управління основними правилами та процесами на боці ЦБД.
CDB objects
Терміни
Авторизаційний ключ - унікальний токен, який видається Брокеру після проходження акредитації та укладання договорів. Це ключ доступу для здійнення маніпуляцій над обʼєктами визначених сервісів ЦБД. Ключ дає можливість публікувати обʼєкти та змінювати існуючі обʼєкти їх власнику, якщо це передбачено сервісом.
На читання Обʼєкти мають бути доступні без використання авторизаційного ключа (якщо зворотнє не передбачено вимогами до конкретного типу обʼєктів. Наприклад, процедури [GFW] Факторинг - не публічні на читання за певних умов)
- Валідність - характеризує технічну придатність ключа для використання в системі. Ключ відповідає всім технічним вимогам системи: має правильний формат, не прострочений і не скомпрометований.
- Активність - визначає адміністративний статус ключа в системі
Авторизаційний ключ може перебувати в одному з наступних станів:
Стан | Опис | Можливості |
---|---|---|
Валідний та активний | Ключ технічно придатний і дозволений для використання адміністратором. | Доступ до всіх функцій сервісу: читання по mirror, читання по API, публікація, редагування |
Валідний та деактивований | Ключ технічно придатний, але його використання обмежено адміністратором. | Читання через mirror. Читання по API (публічні обʼєкти) Активні дії (публікація, зміна об'єктів) недоступні. |
Невалідний | Ключ технічно непридатний | Читання по API (публічні обʼєкти) Інші функції системи недоступна. |
Адміністратор може деактивувати ключ без втрати його валідності, якщо необхідно тимчасово обмежити дії брокера.
Owner token - унікальний токен, який отримує Брокер одразу після публікації обʼєкта, або після зміни owner-а для обʼєкта. Це ключ доступу до обʼєкта.
JWT token - унікальний токен, який отримує Брокер одразу після заватаження документа в Document Service
Брокер - майданчик, який взаємодіє з ЦБД
Дозволи (Permissions) - це набір правил або прав, які визначають, які дії може виконувати Брокер на ЦБД. Вони забезпечують контроль доступу до обʼєктів або операцій, забезпечуючи захист і дотримання політик безпеки.
Дозволи для Брокера є можливість налаштувати:
- По сервісу, до якого надається доступ (procedure, jobber, registry etc)
- По типу Обʼєкта в межах одного сервісу (asset, lease_request etc)
- Для сервісу Procedure обʼєктом вважається Напрям + тип. Наприклад, basicSell-english, smallPrivatization-dutch, commercialLease-priorityEnglish etc
- Має бути можливість додати permission для basicSell-english, але не надати для basicSell-dutch
- Для сервісу Procedure обʼєктом вважається Напрям + тип. Наприклад, basicSell-english, smallPrivatization-dutch, commercialLease-priorityEnglish etc
- По типу дії над обʼєктом. Наприклад, для сервісу procedure для обʼєкта basicSell-english можливість публікувати обʼєкт procedure та обʼєкт bids
- procedure - можливість публікувати обʼєкти procedure та вносити зміни в існуючі обʼєкти, де Брокер є власником
- bids - можливість публікувати обʼєкти procedure.bids та вносити зміни в існуючі обʼєкти, де Брокер є власником
- read_procedure - можливість читати приватні обʼєкти (для Факторингу)
- read_protected_data - можливість читати анонімізовані поля (для Факторингу)
User stories
№ | Story | Actor |
---|---|---|
1 | Як Адміністратор ЦБД, хочу мати можливість надавати Авторизаційний ключ акредитованому Брокеру, щоб в нього була можливість публікувати, змінювати обʼєкти ЦБД | Адміністратор ЦБД |
2 | Як Адміністратор ЦБД, хочу мати можливість налаштувати permissions для Авторизаційного ключа, для розмежування дій по сервісам над обʼєктами певного типу | Адміністратор ЦБД |
2.1 |
Приклад: Авторизаційний ключ дозволяє працювати з обʼєктами сервісу procedure, але не дозволяє працювати з обʼєктами regisrty | Адміністратор ЦБД |
2.2 |
і т.д. | Адміністратор ЦБД |
2.3 |
| |
2.4. | Як Адміністратор ЦБД, хочу мати можливість при налаштуванні Авторизаційного ключа вказати дату і час, з якого цей ключ стає Активним. | Адміністратор ЦБД |
3 | Як Адміністратор ЦБД, хочу мати можливість деактивувати Авторизаційний ключ, що призведе до неможливості Брокеру виконувати дії над обʼєктами (Публікація, редагування) | Адміністратор ЦБД |
4 | Як Адміністратор ЦБД, хочу мати можливість повторно активувати Авторизаційний ключ для Брокера для якого раніше ключ було деактивовано | Адміністратор ЦБД |
5 | Як Адміністратор ЦБД, хочу мати можливість змінювати права для Брокера (для його Автризаційного ключа) не деактивуючи Брокеру Авторизаційний ключ | Адміністратор ЦБД |
6 | Як Адміністратор ЦБД, хочу мати можливість перевипустити Авторизаційний ключ для Брокера, який вже має інший, але втратив його через певні обставини | Адміністратор ЦБД |
7 | Як Брокер, хочу мати можливість публікувати обʼєкти в ЦБД після проходження акредитаціїї та отримання Авторизаційного ключа | Брокер |
8 | Як Брокер, хочу мати можливість змінювати існуючі обʼєкти в ЦБД, де мій Авторизаційний ключ співпадає з owner-ключем обʼєкта + я маю валідний токен обʼєкта | Брокер |
9 | Як Брокер, хочу мати можливість читати обʼєкти по API: з токеном обʼєкта - розгорнуту відповідь, без токена обʼєкта - спрощену відповідь | Брокер |
10 | Як Брокер, хочу мати можливість отримувати обʼєкти на ЧИТАННЯ, якщо мій Авторизаційний ключ деактивовано (API & Mirror) | Брокер |
11 | Як Брокер, хочу мати можливість завантажувати документи в Document Service використовуючи свій Авторизаційний токен (якщо він валідний, не деактивований) | Брокер |
12 | Як Брокер, хочу мати можливість переглядати public та private документи незалежно від статусу Авторизаційного токену | Брокер |
12.1 |
| Брокер |
12.2 |
| Брокер |
13 | Як Брокер, хочу мати можливість переглядати анонімізовані поля в обʼєкті незалежно від статусу Авторизаційного ключа, маючи тільки owner token обʼєкта | Брокер |
14 | Як Адміністратор ЦБД, забороняю видаляти обʼєкти із ЦБД незалежно від наявності Акторизаційного ключа | Адміністратор ЦБД |
Use cases
Use Case 1: Налаштування permissions для Брокера по його Авторизаційному ключу та видача ключа Брокеру
Передумова: Брокер пройшов акредитацію, створена внутрішня заявка на видачу ключів для Брокера
Основний сценарій:
- Адміністратор ЦБД отримавши запит, створює для зазначеного в заявці Брокера Авторизаційний ключ
- Вказує зазначені з заявці permissions для Брокера по його Автризаційному ключу
- Система надає брокеру можливість публікувати та змінювати об’єкти в межах дозволених сервісів.
- Авторизаційний ключ передається брокеру через захищений канал
Результат: Брокер отримав можливість публікувати і змінювати свої обʼєкти використовуючи отриманий Авторизаційний токен
Use Case 2: Внесення змін в permissions для Брокера, який вже має Авторизаційний ключ
Передумова: Отримано заявку на зміну доступів Брокера
Сценарій 1:
- Отримано запит "Майданчик акредитовано для роботи з новим напрямком"
- Адміністратор ЦБД надає Брокеру нові permissions
- Відповідальний зі сторони Prozorro.Sale інформує Брокера про дату початку дії нового permission
Результат: Брокер отримав можливість публікувати і змінювати обʼєкти, до яких були надані права. Читати публічні обʼєкти має бути можливість і без permission
Сценарій 2:
- Отримано запит "Забрати у Майданчика права працювати з напрямком ХХ"
- Адміністратор ЦБД забирає у вказаного Брокера permissions, які дозволяють публікувати\змінювати обʼєкти вказаного напрямку
- Відповідальний зі сторони Prozorro.Sale інформує Брокера про зміну прав
Результат: Брокер втратив можливість публікувати і змінювати обʼєкти, від яких були забрані права. Читати публічні обʼєкти має бути можливість і без permission. В такому випадку, існуючі обʼєкти цього Брокера вже не доступні йому для подальших змін. Бізнесово передбачена можливість перенести обʼєкт до іншого Власника, який має права на цей вид обʼєкту.
Use Case 3: Деактивація Авторизаційного ключа
Передумова: Авторизаційний ключ створено та використовується брокером
Основний сценарій:
- Адміністратор знаходить ключ належний Брокеру.
- Деактивує ключ.
- Система зупиняє доступ до функцій публікації та редагування.
- Ключ залишається доступним для читання через mirror.
Use Case 4: Повторна активація Авторизаційного ключа для Брокера якому раніше ключ деактивували
Передумова: Авторизаційний ключ був створений та деактивований для брокера.
Основний сценарій:
- Адміністратор ідентифікує потрібний Авторизаційний ключ, що належить конкретному Брокеру, в системі.
- Адміністратор обирає опцію повторної активації ключа.
- Система підтверджує, що ключ в деактивованому статусі.
- Система активує ключ та надає доступ Брокеру до функцій публікації та редагування.
- Система відображає повідомлення про успішну активацію ключа.
Бізнесово: Якщо цей Брокер зберіг owner токени до "старих" обʼєктів, то з новим авторизаційним ключем він може продовжити взаємодіяти зі "старими" обʼєктами, за умови, що в них залишились валідні owner токени і їх не передавали іншому Майданчику.
Альтернативний сценарій:
2a. Ключ уже активний:
2a.1. Система інформує адміністратора, що ключ уже активний, і дії не потрібні.
Use Case 5: Публікація об'єктів брокером
Передумови:
- Брокер має валідний та активний ключ.
Основний сценарій:
- Брокер надсилає запит на API для публікації об’єкта.
- Система перевіряє валідність і активність ключа.
- Якщо ключ дійсний, об’єкт публікується в системі.
Use Case 6: Перевипуск Авторизаційного ключа
Передумова:
Брокер вже має (або мав) Авторизаційний ключ, але його втрачено чи став недоступним через певні обставини.
Основний сценарій:
- Адміністратор ідентифікує Брокера, який потребує перевипуску Авторизаційного ключа.
- Адміністратор обирає функцію перевипуску Авторизаційного ключа в системі.
- Система перевіряє, чи існує попередній ключ для цього Брокера.
- Система анулює існуючий ключ та генерує новий Авторизаційний ключ.
- Система надає новий ключ Адміністратору для передачі Брокеру.
- Система логує дію перевипуску для забезпечення аудиту.
Бізнесово: У Брокера має залишитись можливість працювати з обʼєктами, які були йому доступні з попереднім Авторизаційним ключем. Тобто, з точки зору роботи з обʼєктами - перевипуск ключа не має впливати на процес. По старому ключу - доступ має бути заблоковано. Після перевипуску, якщо Брокер робить запит із старим ключем, то він має отримувати помилку аналогічну, коли ключ не валідний.
Альтернативний сценарій:
3a. У Брокера немає попереднього ключа:
3a.1. Система інформує адміністратора, що перевипуск неможливий, оскільки попередній ключ не знайдено.
3a.2. Адміністратор може створити новий ключ для Брокера через окрему функцію.
4a. Попередній ключ активно використовується:
4a.1. Система інформує адміністратора, що перевипуск замінить діючий ключ.
4a.2. Адміністратор підтверджує дію.
4a.3. Система анулює попередній ключ і генерує новий.
Use Case 7: Зміна існуючих об'єктів
Передумови:
- Брокер є власником об’єкта (ключ збігається з
owner-key
). - Ключ валідний і активний.
Основний сценарій:
- Брокер надсилає запит на редагування об’єкта.
- Система перевіряє валідність ключа та токена.
- Об’єкт оновлюється, якщо всі умови виконані.
Use Case 8: Читання об’єктів через API
Актори:
- Брокер
Передумови:
- Ключ може бути активним чи деактивованим.
Основний сценарій:
- Брокер запитує об’єкт через API:
- з токеном об’єкта отримує повну відповідь;
- без токена отримує спрощену відповідь.
Use Case 9: Читання об'єктів при деактивованому ключі
Передумови:
- Ключ деактивовано, але валідний.
Основний сценарій:
- Брокер підключається до mirror або API.
- Система дозволяє доступ до даних лише для читання.
Use Case 10: Завантаження документів у Document Service
Передумови:
- Ключ валідний і активний.
Основний сценарій:
- Брокер надсилає запит на завантаження документа.
- Система перевіряє валідність ключа та дозволяє завантаження.
Use Case 11: Перегляд public і private документів
10.1 Public документи
- Брокер (або будь-який користувач) відкриває публічне посилання.
- Система надає доступ до документа без ключа чи токена.
10.2 Private документи
- Брокер надсилає запит із JWT токеном документа.
- Система перевіряє токен та надає доступ до документа.
Use Case 12: Заборона видалення об’єктів
Основний сценарій:
- Видалення об’єктів в системі заборонено.
- Запити на видалення обʼєктів не розроблені
Use Case 13: Перегляд анонімізованих полів об’єкта за токеном
Передумови:
- Об’єкт містить анонімізовані поля
- Брокер має дійсний токен об'єкта.
Основний сценарій:
- Брокер надсилає запит на перегляд об’єкта через API, надаючи токен об’єкта.
- Система перевіряє валідність токена об’єкта.
- Якщо токен валідний, система переходить до кроку 3.
- Якщо токен невалідний, система повертає помилку доступу.
- Система повертає відповідь із доступними анонімізованими полями об'єкта в деанонімізованому стані.
Результат: Брокер отримує доступ до анонімізованих полів об’єкта, незалежно від статусу свого Авторизаційного ключа.
Action | Authorization token (валідний) | Object token | Description |
---|---|---|---|
Опублікувати обʼєкт в ЦБД | + валідний активний | - | Опублікувати обʼєкт в ЦБД є можливість тільки за наявності актуального токена Авторизації з відповідними правами. Приклад: де, procedure - дає можливість публікувати обʼєкт типу "Процедура" по напрямку basicSell bids - дає можливість публікувати обʼєкт типу "Заява на участь" по напрямку basicSell |
Змінити опублікований обʼєкт в ЦБД | + валідний активний | + | Внести зміни в поля існуючого обʼєкта є можливість тільки за наявності:
|
Читання публіних обʼєктів по API | - валідний або невалідний активний або деактивований | - | Обʼєкт має бути доступний на перегляд як з використанням в запиті Авторизаційного токена, так і без нього. * З токеном передбачена можливість отримати більш розгорнуту API відповідь * присутні особливості доступів до обʼєктів в напрямку [GFW] Факторинг |
Читання НЕ публічних обʼєктів по API | + валідний активний | + | Валідний і активний Авторизаційний ключ дає можливість читати НЕ публічні обʼєкти за умови, що: Авторизаційний ключ є ключем Власника обʼєкта, а також присутній токен обʼєкта |
Читання анонімізованих полів в обʼєкті | - валідний або невалідний активний або деактивований | + | Відображеня анонімізованих полів в деанонімізованому вигляді доступно, якщо в запиті використати токен обʼєкта. При цьому статус Авторизаційного ключа ніяк не впливає на результати відповіді. |
Читання обʼєктів по mirror | + валідний активний або деактивований | - | Валідний Авторизаційний ключ дає можливість отримувати обʼєкти по mirror незалежно від того, Активний він чи ні. |
Читання обʼєктів по SEARCH API | - валідний або невалідний активний або деактивований | - | Доступно без використання Авторизаційного токена та токена обʼєкта |
Опублікувати документ в Document Service | + валідний активний | - | Опублікувати документ в Документ.Сервіс є можливість тільки за наявності актуального токена Авторизації |
Замінити документ в Document Service | + валідний активний | - | Дія недоступна по API. Те, що в обʼєкті, накшталт "Процедура" означає "заміна документа", для Document Service - публікація ще одного. Безпосередньо в Document Service замінити документ можливості немає. |
Читати документ в Document Service | - валідний або невалідний активний або неактивний | -/+ | Для читання public документу Не потрібен Авторизаційний ключ і не потрібен токен обʼєкта Для читання private документу НЕ потрібен Авторизаційний ключ, але обовʼязково потрібен токен обʼєкта |
Читання публічного Модуля аукціону | - валідний або невалідний активний або деактивований |
Ситуації:
1.
- Майданчик_1 публікує Біда з приватними документами
- По запиту, змінюємо Власника для цього Біда з Майданчик_1 на Майданчик_2
- Майданчик_2 тепер має ключ до Біда і може виконувати дії від імені власника Біда.
- Приватні документи і токен доступу до них НЕ змінюється. Новий власник Біда не може отримати доступ до приватних документів.
Можливе рішення: При зміні власника обʼєкта, за наявності приватних документів у обʼєкті, новому власнику потрібно надавати не тільки новий токен доступу до обʼєкта, а також токени до приватних документів. На моменті генерації нового токена, має відбуватись валідація на наявність приватних документів і за їх наявності, витягувати, і 1) перегенерувати ключ 2) залишити поточний і надіслати новому вдаснику, але тоді і "старий" власник буде мати доступ
2.
- Майданчик_1 публікує процедуру
- По запиту процедуру анонімізували
- По запиту змінюємо Власника для цієї процедури з Майданчик_1 на Майданчик_2
- Деанонімізовані поля може бачити тільки новий власник обʼєкта, бо вони доступні тільки за наявності owner token і не залежить від Authorization token
Результат: Майданчик_1 не бачить анонімізовані поля, Майданчик_2 бачить анонімізовані поля як деанонімізовані
Auth Token for Procedure
Дозволи (permissions), які можна надавати до Автризаційного ключа для сервісу Procedure:
- Класифікація по Напряму роботи + типу аукціона. Наприклад, basicSell-english, smallPrivatization-dutch, commercialLease-priorityEnglish
Auth Token for Jobber
Дозволи (permissions), які можна надавати до Автризаційного ключа для сервісу Jobber:
- announcement - можливість виконувати дії над обʼєктом типу announcement
- large_announcement - можливість виконувати дії над обʼєктом типу large_announcement
- legacy_announcement - можливість виконувати дії над обʼєктом типу legacy_announcement
- redemption - можливість виконувати дії над обʼєктом типу redemption
- large_redemption - можливість виконувати дії над обʼєктом типу large_redemption
- legacy_redemption - можливість виконувати дії над обʼєктом типу legacy_redemption
Auth Token for Registry
Дозволи (permissions), які можна надавати до Автризаційного ключа для сервісу Registry:
- object - можливість виконувати дії над обʼєктом типу object
- action - можливість виконувати дії над обʼєктом типу action
- lease_request - можливість виконувати дії над обʼєктом типу lease_request
- asset - можливість виконувати дії над обʼєктом типу asset
- large_asset - можливість виконувати дії над обʼєктом типу large_asset
- legacy_asset - можливість виконувати дії над обʼєктом типу legacy_asset
- execution - можливість виконувати дії над обʼєктом типу execution
- large_execution - можливість виконувати дії над обʼєктом типу large_execution
- legacy_execution - можливість виконувати дії над обʼєктом типу legacy_execution
Relocation
Майданчику видається унікальний Авторизаційний токен, який дає можливість публікувати обʼєкти Relocation в ЦБД
Сервіс Relocation працює з об'єктами через API і надає декілька способів доступу:
1. Публікація об'єктів через API
- Для публікації об'єктів видається Auth Token.
- Цей токен є обов'язковим для автентифікації при роботі з endpoint, який дозволяє створювати об'єкти.
2. Читання об'єктів
- Існує спеціальний endpoint для читання, який не потребує авторизації. Це означає, що доступ до об'єктів на цьому endpoint відкритий для всіх користувачів.
3. Робота через WebSocket
- WebSocket дозволяє отримувати об'єкти в реальному часі (mirror-потік).
- Для підключення до WebSocket потрібен валідний авторизаційний ключ, але він може бути неактивним (наприклад, перестали співпрацювати з Майданчиком А, але можна неативний, валідний ключ використовувати для підключення до потоку).
Ця архітектура дозволяє гнучко працювати з об'єктами:
- Публікація захищена токеном для забезпечення безпеки.
- Читання — відкритий доступ для швидкого отримання даних.
- WebSocket забезпечує підписку на зміни з мінімальними вимогами до автентифікації.
Relocation User Stories
1 | Як Брокер, я хочу публікувати нові об'єкти через API, щоб зробити їх доступними. |
|
2 | Як Брокер, я хочу читати об'єкти без авторизації, щоб мати доступ до публічної інформації. |
|
3 | Як Брокер, я хочу підключитися до WebSocket, щоб отримувати оновлення об'єктів у реальному часі (mirror). |
|
5 | Як адміністратор, я хочу видавати Auth Token користувачам, щоб обмежити доступ до публікації об'єктів. |
|
6 | Як Брокер, я хочу отримувати об'єкти через WebSocket навіть після деактивації мого токена, щоб мати доступ до змін |
|
7 | Як Брокер, я хочу отримувати сповіщення про помилки, якщо я намагаюся використовувати деактивований токен для публікації. |
|
Survey
Для читання даних сервісу survey необхідно використовувати Авторизаційний ключ з правами на вказаний сервіс.
У клієнта (наприклад, BI) має бути валідний ТА активний авторизаційний ключ, для того, щоб була можливість по API за допомогою GET запиту отримати обʼєкти.
Стан Авторизаційного ключа | Опис | Можливості |
---|---|---|
Валідний та активний | Ключ технічно придатний і дозволений адміністратором для використання. | Доступ до функцій сервісу: читання по API |
Валідний та деактивований | Ключ технічно придатний, але його використання обмежено адміністратором. | Дії недоступні. |
Невалідний та активний | Ключ технічно непридатний, навіть якщо адміністратор дозволив його використання (ситуація є малоймовірною, зазвичай вказує на помилку). | Дії недоступні. |
Невалідний та деактивований | Ключ не придатний технічно і відключений адміністратором. | Дії недоступні. |
Mirror-потік для сервісу Survey відсутній
Survey User Stories
1 | Як користувач сервісу хочу, щоб мій валідний та активний авторизаційний ключ дозволяв отримувати об’єкти сервісу Survey через GET-запит API |
|
2 | Як користувач, хочу, щоб при спробі отримати дані з деактивованим ключем мені поверталося повідомлення про відмову в доступі, щоб я міг розуміти, що доступ обмежений і потребує втручання адміністратора. |
|
3 | Як адміністратор сервісу, хочу, щоб я міг змінювати статус авторизаційних ключів (активний/деактивований), щоб керувати доступом до сервісу Survey через API. |
|
4 | Як адміністратор, хочу, щоб усі запити до сервісу Survey через API логувалися, включаючи інформацію про статус авторизаційного ключа, щоб можна було проводити аудит доступу та аналізувати можливі проблеми. |
|