Платформа 3V/DataManager/Источник данных: различия между версиями
(Новая страница: «{{DISPLAYTITLE: Как настроить источник данных для DataManager}}») |
|||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Как настроить источник данных для DataManager}} | {{DISPLAYTITLE: Как настроить источник данных для DataManager}} | ||
+ | == Источник данных (Source) == | ||
+ | === Дискриминатор === | ||
+ | discriminator - дискриминатор (тип данных - string) | ||
+ | |||
+ | * '''UrlDataManagerSource''' - в случае, если источник данных ''ссылка на ресурс'' | ||
+ | Если источник данных - ''ссылка'', то в SOURCE необходимо указать '''Uri, Credentials, Headers''': | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "Source": { | ||
+ | "discriminator": "UrlDataManagerSource", | ||
+ | "Uri": "", | ||
+ | "Credentials": "", | ||
+ | "Headers": "" | ||
+ | }, | ||
+ | </syntaxhighlight> | ||
+ | * '''ConstantDataManagerSource''' - если источник данных ''файл'' | ||
+ | Если источник данных - ''файл'', то в SOURCE достаточно прописать только дискриминатор: | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "Source": { | ||
+ | "discriminator": "ConstantDataManagerSource" | ||
+ | }, | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Унифицированный идентификатор ресурса === | ||
+ | Uri - унифицированный идентификатор ресурса | ||
+ | |||
+ | DataManager поддерживает следующие источники: | ||
+ | * Postgres | ||
+ | * Любой get/post запрос | ||
+ | ВАЖНО: необходимо, чтобы запрос, прописанный в Uri возвращал данные в '''формате json''' | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Стенд !! Пример !! Пояснение | ||
+ | |- | ||
+ | | finance || <syntaxhighlight lang="JSON" line> | ||
+ | "Source": { | ||
+ | "discriminator": "UrlDataManagerSource", | ||
+ | "Uri": "https://fmpcloud.io/api/v3/symbol/available-indexes?apikey=887f267b885bd2384c2b3ef0bfbee3c9" | ||
+ | }, | ||
+ | </syntaxhighlight> | ||
+ | || Если перейти по ссылке, то данные представляются в json-формате | ||
+ | |- | ||
+ | | double.dev || <syntaxhighlight lang="JSON" line> | ||
+ | "Source": { | ||
+ | "discriminator": "UrlDataManagerSource", | ||
+ | "Uri": "http://filestorage/api/File/e0e88d78-339e-496c-baa8-d5fb18848692" | ||
+ | }, | ||
+ | </syntaxhighlight> | ||
+ | || Ссылка на get-запрос файлового хранилища | ||
+ | ''(как получить ссылку на файл из файлового хранилища см ниже)'' | ||
+ | |- | ||
+ | | corp-portal || <syntaxhighlight lang="JSON" line> | ||
+ | "Source": { | ||
+ | "discriminator": "UrlDataManagerSource", | ||
+ | "Uri": "https://bs-extension.bright-soft.org/atlassian-adapter/Jira/Projects" | ||
+ | }, | ||
+ | </syntaxhighlight> | ||
+ | || Ссылка на get-запрос сервиса atlassian-adapter | ||
+ | |} | ||
+ | |||
+ | Для того, чтобы получить ссылку на файл, необходимо сделать следующее: | ||
+ | # Получить идентификатор файла с помощью [[Платформа 3V/Справочник/Задание атрибутов в справочнике/Вычислимые значения файла|вычислимого атрибута]] | ||
+ | # Перейти в файловое хранилище проекта (filestorage) и найти get-метод [https://3v.3v-group.net/filestorage/swagger/index.html#/File/File_GetFile File/{fileid}] | ||
+ | # Заполнить параметр вызова "fileid" найденным в первом пункте значением (некоторые стенды дополнительно в качестве параметра запуска принимают тенант), запустить метод | ||
+ | # После запуска метода скопировать Request URL, оставить строку в формате "http://filestorage/api/File/НАБОР_ЦИФР" (набор цифр, в данном случае - ''fileid'') | ||
+ | |||
+ | ''В случае, если данные предоставляются не из файлового хранилища, Request URL следует оставить без изменений'' | ||
+ | |||
+ | === Параметры авторизации === | ||
+ | Credentials - параметры авторизации | ||
+ | На данный момент, для DataManager включена авторизация, без авторизации сервис работать не будет | ||
+ | Credentials содержит следующие настройки: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Поле !! Описание !! Тип | ||
+ | |- | ||
+ | | discriminator || | ||
+ | * ConfidentialClientAuthenticationSettingsDto - аутентификация конфиденциального клиента | ||
+ | * PasswordAuthenticationSettingsDto - аутентификация с помощью логина и пароля | ||
+ | || string (строка) | ||
+ | |- | ||
+ | | TokenRequestUrl || Ссылка из адресной строки перед авторизацией в приложении || string (строка) | ||
+ | |- | ||
+ | | ClientId || Идентификатор клиента, который берется из keycloakа || string (строка) | ||
+ | |- | ||
+ | | ClientSecret || Keycloak - realm - clients - раздел "Credentials" - поле "Secret" || string (строка) | ||
+ | |- | ||
+ | | UserName || Логин для авторизации на стенде ''(данное поле добавляется для дискриминатора '''"PasswordAuthenticationSettingsDto"''''') || string (строка) | ||
+ | |- | ||
+ | | Password || Пароль для авторизации на стенде''(данное поле добавляется для дискриминатора '''"PasswordAuthenticationSettingsDto"''''') || string (строка) | ||
+ | |} | ||
+ | |||
+ | ===== Discriminator ===== | ||
+ | Настройка для Credentials для авторизации по логину/паролю: | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "Credentials": { | ||
+ | "discriminator": "PasswordAuthenticationSettingsDto", | ||
+ | "TokenRequestUrl": "https://3v.3v-group.net/auth/realms/trivium/protocol/openid-connect/token", | ||
+ | "clientId": "clientid", | ||
+ | "clientSecret": "5gq428rz-wpx1-5751-b0r1-h4x5wb9m5210", | ||
+ | "UserName": "username", | ||
+ | "Password": "password" | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Настройка для Credentials для аутентификации конфиденциального клиента: | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "Credentials": { | ||
+ | "discriminator": "ConfidentialClientAuthenticationSettingsDto", | ||
+ | "TokenRequestUrl": "https://smart-id-test.mos.ru/iam/auth/realms/dev/protocol/openid-connect/token", | ||
+ | "clientId": "clientid", | ||
+ | "clientSecret": "5gq428rz-wpx1-5751-b0r1-h4x5wb9m5210" | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===== TokenRequestUrl ===== | ||
+ | Для TokenRequestUrl ссылка берется из адресной строки перед авторизацией в приложении (для какого приложения необходим DataManager - из такого приложения и необходимо взять ссылку). '''Копируем ссылку из адресной строки до "openid-connect/" и добавляем "token"''' | ||
+ | |||
+ | ''ПРИМЕР'': | ||
+ | * Ссылка для корпоративного портала перед авторизацией пользователя выглядит следующим образом - "https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/auth?response_type=code&client_id=corp-engine&state=WFl3MDBGeS52TXJjYkl5bmFDeFBoSi5QU1VYUm1EYm1-ckJOSXBPTnFiTVhD&redirect_uri=https%3A%2F%2Fcorp-portal.x-service.online%2Fapp%2F&scope=openid%20profile&code_challenge=A5_wW-7WsXwMBgHPXxUiJ5Wh6Cwvzs83bzOcW4fU8jQ&code_challenge_method=S256&ui_locales=ru" | ||
+ | * Для TokenRequestUrl необходима только '''https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/''' | ||
+ | * К скопированной части ссылки добавляем "token" | ||
+ | * Получаем необходимый запрос для авторизации для DataManager - '''https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/token''') | ||
+ | |||
+ | ===== ClientId ===== | ||
+ | Чтобы получить clientId необходимо: | ||
+ | * Перейти в keycloak | ||
+ | * Выбрать проект (realm) | ||
+ | * Перейти в раздел "clients" | ||
+ | * Выбрать необходимого клиента (для DataManager может быть настроен клиент, который в название содержит "datamanager" - его можно использовать для дискриминатора "ConfidentialClientAuthenticationSettingsDto", так же можно использовать "corp-engine", но уже для парольной авторизации, то есть для дискриминатора "PasswordAuthenticationSettingsDto") | ||
+ | |||
+ | ===== ClientSecret ===== | ||
+ | Настройка "clientSecret" - опциональная!!! | ||
+ | Если все-таки необходима данная настройка, то, как и в случае с clientId: | ||
+ | * Перейти в keycloak | ||
+ | * Выбрать проект (realm) | ||
+ | * Перейти в раздел "clients" | ||
+ | * Выбрать необходимого клиента | ||
+ | * Перейти в раздел "Credentials" | ||
+ | * Найти поле "Sectet" и скопировать строку | ||
+ | |||
+ | === Токен доступа === | ||
+ | Headers - токен доступа | ||
+ | |||
+ | При обращении к сервисам (источникам данных), необходимо передавать токен: | ||
+ | В поле "secret" приходит определение того, кто может работать | ||
+ | |||
+ | '''1 вариант - secret''' | ||
+ | |||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "Headers": { | ||
+ | "secret": "Ke2QSqWkX4FgyKnx6RYnYFLyqA2MHTq9Jvdk"" | ||
+ | }, | ||
+ | </syntaxhighlight> | ||
+ | В поле "secret" приходит определение того, кто может работать | ||
+ | |||
+ | ''В некоторых проектах используется настройка "namespace", так как определение тенанта идет через заголовок, то есть когда авторизуешься в определенном приложении и выбираешь тенант - веб выбранный тенант сам вставляет во все запросы'' | ||
+ | |||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "Headers": { | ||
+ | "namespace": "landscaping"" | ||
+ | }, | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''2 вариант - Bearer <token>''' | ||
+ | |||
+ | Можно задать токен, но надо понимать, что Bearer токен имеет ограниченное время жизни. Токен берем из средств разработчика (f12 или ctrl+f12) | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "Headers": { | ||
+ | "Authorization": "Bearer <token>" | ||
+ | }, | ||
+ | </syntaxhighlight> |
Версия 16:16, 30 ноября 2022
Содержание
Источник данных (Source)
Дискриминатор
discriminator - дискриминатор (тип данных - string)
- UrlDataManagerSource - в случае, если источник данных ссылка на ресурс
Если источник данных - ссылка, то в SOURCE необходимо указать Uri, Credentials, Headers:
1 "Source": {
2 "discriminator": "UrlDataManagerSource",
3 "Uri": "",
4 "Credentials": "",
5 "Headers": ""
6 },
- ConstantDataManagerSource - если источник данных файл
Если источник данных - файл, то в SOURCE достаточно прописать только дискриминатор:
1 "Source": {
2 "discriminator": "ConstantDataManagerSource"
3 },
Унифицированный идентификатор ресурса
Uri - унифицированный идентификатор ресурса
DataManager поддерживает следующие источники:
- Postgres
- Любой get/post запрос
ВАЖНО: необходимо, чтобы запрос, прописанный в Uri возвращал данные в формате json
Стенд | Пример | Пояснение |
---|---|---|
finance | 1 "Source": {
2 "discriminator": "UrlDataManagerSource",
3 "Uri": "https://fmpcloud.io/api/v3/symbol/available-indexes?apikey=887f267b885bd2384c2b3ef0bfbee3c9"
4 },
|
Если перейти по ссылке, то данные представляются в json-формате |
double.dev | 1 "Source": {
2 "discriminator": "UrlDataManagerSource",
3 "Uri": "http://filestorage/api/File/e0e88d78-339e-496c-baa8-d5fb18848692"
4 },
|
Ссылка на get-запрос файлового хранилища
(как получить ссылку на файл из файлового хранилища см ниже) |
corp-portal | 1 "Source": {
2 "discriminator": "UrlDataManagerSource",
3 "Uri": "https://bs-extension.bright-soft.org/atlassian-adapter/Jira/Projects"
4 },
|
Ссылка на get-запрос сервиса atlassian-adapter |
Для того, чтобы получить ссылку на файл, необходимо сделать следующее:
- Получить идентификатор файла с помощью вычислимого атрибута
- Перейти в файловое хранилище проекта (filestorage) и найти get-метод File/{fileid}
- Заполнить параметр вызова "fileid" найденным в первом пункте значением (некоторые стенды дополнительно в качестве параметра запуска принимают тенант), запустить метод
- После запуска метода скопировать Request URL, оставить строку в формате "http://filestorage/api/File/НАБОР_ЦИФР" (набор цифр, в данном случае - fileid)
В случае, если данные предоставляются не из файлового хранилища, Request URL следует оставить без изменений
Параметры авторизации
Credentials - параметры авторизации На данный момент, для DataManager включена авторизация, без авторизации сервис работать не будет Credentials содержит следующие настройки:
Поле | Описание | Тип |
---|---|---|
discriminator |
|
string (строка) |
TokenRequestUrl | Ссылка из адресной строки перед авторизацией в приложении | string (строка) |
ClientId | Идентификатор клиента, который берется из keycloakа | string (строка) |
ClientSecret | Keycloak - realm - clients - раздел "Credentials" - поле "Secret" | string (строка) |
UserName | Логин для авторизации на стенде (данное поле добавляется для дискриминатора "PasswordAuthenticationSettingsDto") | string (строка) |
Password | Пароль для авторизации на стенде(данное поле добавляется для дискриминатора "PasswordAuthenticationSettingsDto") | string (строка) |
Discriminator
Настройка для Credentials для авторизации по логину/паролю:
1 "Credentials": {
2 "discriminator": "PasswordAuthenticationSettingsDto",
3 "TokenRequestUrl": "https://3v.3v-group.net/auth/realms/trivium/protocol/openid-connect/token",
4 "clientId": "clientid",
5 "clientSecret": "5gq428rz-wpx1-5751-b0r1-h4x5wb9m5210",
6 "UserName": "username",
7 "Password": "password"
8 }
Настройка для Credentials для аутентификации конфиденциального клиента:
1 "Credentials": {
2 "discriminator": "ConfidentialClientAuthenticationSettingsDto",
3 "TokenRequestUrl": "https://smart-id-test.mos.ru/iam/auth/realms/dev/protocol/openid-connect/token",
4 "clientId": "clientid",
5 "clientSecret": "5gq428rz-wpx1-5751-b0r1-h4x5wb9m5210"
6 }
TokenRequestUrl
Для TokenRequestUrl ссылка берется из адресной строки перед авторизацией в приложении (для какого приложения необходим DataManager - из такого приложения и необходимо взять ссылку). Копируем ссылку из адресной строки до "openid-connect/" и добавляем "token"
ПРИМЕР:
- Ссылка для корпоративного портала перед авторизацией пользователя выглядит следующим образом - "https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/auth?response_type=code&client_id=corp-engine&state=WFl3MDBGeS52TXJjYkl5bmFDeFBoSi5QU1VYUm1EYm1-ckJOSXBPTnFiTVhD&redirect_uri=https%3A%2F%2Fcorp-portal.x-service.online%2Fapp%2F&scope=openid%20profile&code_challenge=A5_wW-7WsXwMBgHPXxUiJ5Wh6Cwvzs83bzOcW4fU8jQ&code_challenge_method=S256&ui_locales=ru"
- Для TokenRequestUrl необходима только https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/
- К скопированной части ссылки добавляем "token"
- Получаем необходимый запрос для авторизации для DataManager - https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/token)
ClientId
Чтобы получить clientId необходимо:
- Перейти в keycloak
- Выбрать проект (realm)
- Перейти в раздел "clients"
- Выбрать необходимого клиента (для DataManager может быть настроен клиент, который в название содержит "datamanager" - его можно использовать для дискриминатора "ConfidentialClientAuthenticationSettingsDto", так же можно использовать "corp-engine", но уже для парольной авторизации, то есть для дискриминатора "PasswordAuthenticationSettingsDto")
ClientSecret
Настройка "clientSecret" - опциональная!!! Если все-таки необходима данная настройка, то, как и в случае с clientId:
- Перейти в keycloak
- Выбрать проект (realm)
- Перейти в раздел "clients"
- Выбрать необходимого клиента
- Перейти в раздел "Credentials"
- Найти поле "Sectet" и скопировать строку
Токен доступа
Headers - токен доступа
При обращении к сервисам (источникам данных), необходимо передавать токен: В поле "secret" приходит определение того, кто может работать
1 вариант - secret
1 "Headers": {
2 "secret": "Ke2QSqWkX4FgyKnx6RYnYFLyqA2MHTq9Jvdk""
3 },
В поле "secret" приходит определение того, кто может работать
В некоторых проектах используется настройка "namespace", так как определение тенанта идет через заголовок, то есть когда авторизуешься в определенном приложении и выбираешь тенант - веб выбранный тенант сам вставляет во все запросы
1 "Headers": {
2 "namespace": "landscaping""
3 },
2 вариант - Bearer <token>
Можно задать токен, но надо понимать, что Bearer токен имеет ограниченное время жизни. Токен берем из средств разработчика (f12 или ctrl+f12)
1 "Headers": {
2 "Authorization": "Bearer <token>"
3 },