Платформа 3V/DataManager/Источник данных: различия между версиями

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{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

Для того, чтобы получить ссылку на файл, необходимо сделать следующее:

  1. Получить идентификатор файла с помощью вычислимого атрибута
  2. Перейти в файловое хранилище проекта (filestorage) и найти get-метод File/{fileid}
  3. Заполнить параметр вызова "fileid" найденным в первом пункте значением (некоторые стенды дополнительно в качестве параметра запуска принимают тенант), запустить метод
  4. После запуска метода скопировать Request URL, оставить строку в формате "http://filestorage/api/File/НАБОР_ЦИФР" (набор цифр, в данном случае - fileid)

В случае, если данные предоставляются не из файлового хранилища, Request URL следует оставить без изменений

Параметры авторизации

Credentials - параметры авторизации На данный момент, для DataManager включена авторизация, без авторизации сервис работать не будет Credentials содержит следующие настройки:

Поле Описание Тип
discriminator
  • ConfidentialClientAuthenticationSettingsDto - аутентификация конфиденциального клиента
  • PasswordAuthenticationSettingsDto - аутентификация с помощью логина и пароля
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"

ПРИМЕР:

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           },