dataspace_quickstart
Быстрый старт Platform V DataSpace
Введение
Добро пожаловать в руководство "Быстрый старт" по продукту Platform V DataSpace!
Данное руководство демонстрирует пошаговое развертывание полноценного fullstack-приложения "Список задач", созданного с применением DataSpace. Приложение представляет собой трекер задач с возможностью работы в многопользовательском режиме, а также делегирования прав доступа к задачам.
Целью данного примера является демонстрация основных шагов по разработке прикладных решений на базе DataSpace, их интеграции, возможностям работы с языком запросов GraphQL, а также организации системы аутентификации пользователей.
Для успешной работы с проектом желательно иметь хотя бы минимальные навыки программирования, работы с командной строкой. Однако данное условие не является обязательным. Данное руководство поможет специалистам с любым уровнем навыков, которые заинтересованы в изучении и практическом применении Platform V DataSpace!
Общая информация о DataSpace
Platform V DataSpace является инновационным облачным решением для хранения и управления данными, реализующим концепции Low code, DааS (Data as a Service) и BааS (Backend as a Service). Продукт предоставляет гибкие возможности поиска и получения данных, визуальный конструктор моделей предметной области, продвинутую систему мониторинга.
Low code – метод проектирования и разработки приложений с помощью интуитивно понятных графических инструментов и встроенных функций, которые снижают традиционные (профессиональные) требования к написанию кода.
Platform V DataSpace обладает удобным визуальным редактором моделей данных с широкой функциональностью и дружественным пользовательским интерфейсом. Также в системе предусмотрена подробная техническая документация и различные обучающие материалы, благодаря которым можно быстро начать работу.
DaaS (Data as a Service) – это модель предоставления данных в качестве услуги, при которой данные предоставляются клиентам через облачную платформу или API. Данная услуга позволяет пользователям получать доступ к данным без необходимости их хранения и обработки собственными ресурсами. Это облегчает процесс анализа данных и позволяет быстро реагировать на изменения рынка.
BaaS (Backend as a Service) - это модель предоставления услуг, при которой поставщик предоставляет разработчикам готовую backend-функциональность для создания приложений через API. Это позволяет сосредоточиться на разработке клиентской части приложения без необходимости разрабатывать серверную часть с нуля.
DataSpace обладает возможностью, помимо обеспечения инфраструктуры и работы с данными предметной области, реализовывать бизнес-логику:
Продукт дает возможность разработчикам frontend- и backend-приложений работать с данными в терминах модели своей предметной области, вести разработку на языках программирования Java, JavaScript, Python, Go, полноценно работать с GraphQL API и многое другое.
DataSpace входит в состав обширного набора инструментов разработки и поддержки IT-инфраструктуры от Сбер — "Platform V".
Ключевые преимущества Platform V DataSpace:
-
Экономия
Снижение расходов на создание backend-инфраструктуры. -
Высокая производительность
Возможности разработки высоконагруженных сервисов, приложений. -
Безопасность
Продукт основан на реальных внедрениях в enterprise-сегменте, позволяет реализовать импортозамещение. -
Мультиязычность
Поддержка Java, JavaScript, Python, Go. -
Совместимость с GraphQL API
Гибкие возможности получения и манипулирования данными.
1. Подготовка к работе
Проект представляется собой fullstack-приложение, frontend-часть которого реализована c помощью React и библиотеки визуальных компонентов Antd, а backend — с помощью DataSpace. Для получения и модификации данных применяется язык запросов GraphQL, в качестве системы аутентификации и авторизации — open-source решение Keycloak.
В данном руководстве описано развертывание проекта в операционной системе Mac OS. Для Windows и Linux порядок шагов является аналогичным, но с учетом особенностей данных ОС. Также для избежания сложностей с настройкой Keycloak и OpenJDK рекомендуем устанавливать указанные ниже версии приложений.
Необходимое ПО:
-
Любая IDE, например Visual Studio Code.
https://code.visualstudio.com/ -
Система контроля версий Git.
https://git-scm.com/ -
Node.js — среда серверного выполнения JavaScript.
https://nodejs.org/ -
OpenJDK v18.0.2+9 (для работы Keycloak).
https://jdk.java.net/archive/ -
Система управления аутентификацией Keycloak v17.0.1.
https://github.com/keycloak/keycloak/releases/download/17.0.1/keycloak-legacy-17.0.1.zip
Развертывание frontend-части проекта
После успешной установки всех указанных выше инструментов необходимо выбрать удобную директорию на жестком диске где будут находиться рабочий файлы проекта, перейти в эту папку в командной строке и выполнить следующую команду:
git clone https://gitverse.ru/viktor.chebotarev/dataspace_quickstart
Начнется процесс клонирования (скачивания) файлов проекта с сервиса GitVerse
В случае возникновения проблем с клонированием репозитория проверьте, не включен ли у Вас какой-либо VPN, особенно если работаете в корпоративной сетевой среде. Чаще всего проблемы со скачиванием связаны именно с этим.
После завершения скачивания проекта в рабочей директории будет создана папка dataspace_quickstart, содержащая все необходимое для развертывания проекта. Ниже приводится таблица с кратким описанием и назначением всех файлов, отдельные ключевые файлы проекта будут рассмотрены более подробно далее в руководстве.
Директория/файл | Описание |
---|---|
graphql/ | GraphQL-компоненты проекта |
requests.graphql | GraphQL-запросы проекта, получение (query) и изменение (mutation) данных. |
schema.graphql | GraphQL-схема данных проекта в формате SDL, выгружается из визуального редактора моделей DataSpace. |
permissions/ | Работа с разрешениями GraphQL-запросов |
plugin.js | Служебный плагин для подготовки данных о GraphQL-запросах проекта, генерирует файл __requests.json. |
__requests.json | Служебный файл, содержит имена и код GraphQL-запросов, результат работы плагина permissions/plugin.js. |
permissions.json | Итоговый файл загрузки разрешений для GraphQL-запросов в DataSpace, подготавливается на основе файла __requests.json. |
public/ | Статические ресурсы React-приложения |
index.html | Стартовая статическая HTML-страница проекта. |
keycloak.json | Конфигурационный файл OAuth 2.0. Используется для настройки аутентификации и авторизации в приложении |
resources/ | Служебные файлы текущего руководства (изображения) |
src/ | TypeScript-код приложения |
__generate/ | Выходная папка генерации GraphQL Codegen (автоматическая генерация TypeScript-типов на основе GraphQL-запросов) |
requests.ts | TypeScript-типы, операции и React Apollo компоненты, генерируется GraphQL Codegen на основе файлов requests.graphql и schema.graphql. |
components/ | React-компоненты приложения |
index.ts | Экспорт компонентов Panel, AddForm и TaskTable. |
Panel.tsx | React-компонент, верхняя панель с информацией об имени пользователя и кнопкой Logout. |
AddForm.tsx | React-компонент, добавление новой задачи. |
EditForm.tsx | React-компонент, редактирование задачи. |
TaskTable.tsx | React-компонент, список задач. |
AccessForm.tsx | React-компонент, редактирование прав доступа к задаче. |
context/ | Служебные файлы контекста |
auth.tsx | В файле создается AuthProvider - компонент, который предоставляет контекст аутентификации для всего приложения. |
data.tsx | В файле создается DataProvider, который используется другими компонентами для доступа к данным. |
index.ts | Экспорт провайдеров AuthProvider и DataProvider. Каждый из них предоставляет доступ к своим данным и функциям другим компонентам в приложении |
App.tsx | Базовый react-компонент, управляет инициализацией провайдеров контекста и отображением дочерних компонентов Panel, AddForm и TaskTable. |
index.css | Основная таблица CSS-стилей приложения, управляет внешним видом компонентов, задавая их размеры, отступы и другие параметры. |
main.tsx | Точка входа в react-приложение, инициализация провайдеров контекста AuthProvider и DataProvider, а также компонента App. |
utils.ts | Служебная утилита для работы с календарными данными. |
.env | Конфигурационный файл настройки подключения к GraphQL API DataSpace. |
certs.json | Открытая часть ключа JSON Web Key Set. |
.gitignore | Конфигурационный файл Git. |
codegen.yml | Конфигурационный файл утилиты Codegen (генерация TypeScript-типов на основе GraphQL-запросов и схемы данных). |
model.xml | Модель предметной области в формате XML, выгружается из визуального редактора моделей DataSpace. |
package.json | Конфигурационный файл NPM (Node Package Manager) для управления зависимостями проекта. Содержит общую информацию о пакетах, которые необходимы для работы проекта, а также другие метаданные. |
permgen.yml | Конфигурационный файл служебной утилиты Permgen (permissions/plugin.js). |
README.md | Файл документации, текущее руководство. |
tsconfig.json | Конфигурационный файл TypeScript. |
webpack.config.js | Основной конфигурационный файл сборщика Webpack. |
webpack.dev.config.js | Дополнительный конфигурационный файл Webpack для режима разработки. |
AI-ассистент разработчика GigaCode
Для существенного повышения продуктивности работы с данным руководством рекомендуем воспользоваться AI-ассистентом разработчика от Сбер — GigaCode.
GigaCode — это AI-ассистент разработчика, который позволяет ускорить процесс написания кода, предлагая наиболее вероятные и релевантные подсказки. GigaCode анализирует имеющийся контекст и предлагает полные конструкции функций, циклов, условий и других элементов кода, что позволяет ускорить процесс разработки, повысить производительность, а также сделать процесс программирования более продуктивным.
Для начала работы c данным инструментом выполните следующие шаги:
-
Установите расширение GigaCode для вашей IDE, следуя инструкциям на сайте https://gigacode.ru/.
-
Откройте любой файл проекта, скачанного в предыдущем разделе. Выделите в нем фрагмент кода или весь код, который необходимо проанализировать.
-
Перейдите в чат GigaCode (кликните на значок GigaCode в интерфейсе IDE, в VS Code - в левой боковой панели)
-
Напишите в чат свой вопрос по выделенному фрагменту кода или, введя /, выберите одну из команд:
/explain для объяснения выделенного кода,
/explain_stepbystep для пошагового анализа кода,
/doc для подготовки документации, а также
/test для создания тестов.
После ввода нажмите Enter и укажите язык, на котором GigaCode выведет ответ. На данный момент GigaCode умеет отвечать на русском и английском языках. -
GigaCode выведет в чат ответ на введенный вопрос или результат работы одной из четырех описанных выше команд.
Работа с GigaCode в Visual Studio Code:
Работа с GigaCode в GIGA IDE:
В настоящее время GigaCode поддерживает более 35 языков программирования, а также совместим со множеством популярных редакторов и интегрированных сред разработки, что делает инструмент полезным для большинства разработчиков и позволяет максимально использовать его возможности для улучшения рабочего процесса.
На этом подготовка к развертыванию проекта завершена, можно перейти к настройке системы аутентификации Keycloak.
2. Аутентификация, Keycloak
Для организации процесса аутентификации пользователей в данном проекте применяется open-source решение Keycloak, которое является мощной платформой для управления доступом (IAM Manager) и может быть использовано для защиты различных типов приложений и сервисов.
С точки зрения уровней доступа в приложении есть две роли: Администратор и Пользователь.
Для демонстрации возможностей разграничения прав доступа (в том числе делегирования) далее будут созданы две учетные записи пользователей и одна учетная запись администратора Keycloak.
Установка и запуск Keycloak:
-
Проверьте корректность установки JDK, выполнив в командной строке:
java --version
При корректной установке JDK в командной строке отобразится версия JDK:
openjdk 17.0.2 -
Распакуйте установочный архив keycloak-legacy-17.0.1.zip в удобное место на диске.
-
Откройте командную строку, перейдите в ней внутрь распакованной из архива keycloak-legacy-17.0.1.zip папки keycloak-17.0.1 и далее в папку bin. Запустите Keycloak командой
в Mac OS или./standalone.sh
в Windows. В командной строке отобразится информация о процессе загрузки Keycloak.standalone.bat
Важно, что Keycloak должен быть запущен и работать в фоновом режиме на протяжении всей работы с приложением. В случае необходимости выполнения каких-либо других команд в Терминале или CMD необходимо открывать их в новом окне.
Настройка Keycloak для работы с проектом:
-
После завершения загрузки Keycloak перейдите в административную панель, открыв в браузере адрес: http://localhost:8080/auth/.
-
Укажите название и пароль учетной записи администратора (для тестовых целей подойдет, например, admin/12345):
- После создания учетной записи администратора войдите в нее с указанным ранее паролем:
После успешной авторизации откроется административная консоль Keycloak с настройками рабочего пространства по умолчанию - Master:
Далее для проекта необходимо создать:
- рабочее пространство (Realm)
- клиент (Client)
- роль Пользователь (Role)
- две учетные записи (User) с ролью Пользователь
Более подробную информацию об основных объектах Keycloak можно найти в разделе Дополнительная информация.
- Создайте новое рабочее пространство (Realm):
После создания рабочего пространства произойдет автоматическое переключение на него:
- Создайте клиента (Client):
Client ID: todos
Root URL: http://localhost:3000
После создания клиента выполнять какие-либо еще настройки не требуется, перейдем к созданию пользователей.
- Создайте две учетные записи пользователей:
Username: user1
Email: user1@mail.ru
Username: user2
Email: user2@mail.ru
Достаточно указать значения только для полей Username и Email, остальные можно не заполнять. После ввода данных для сохранения нажмите Save.
Перейдя на вкладку Credentials пользователя, укажите пароль (например, 12345) и установите переключатель Temporary в положение OFF – пароль будет постоянным и система не попросит сменить его после первого входа.
Аналогичные действия необходимо выполнить для второго пользователя user2.
- Создайте роль user
- Добавьте роль user двум созданным пользователям. В Keycloak есть особенность – для того, чтобы просмотреть всех пользователей на странице Users необходимо нажать на кнопку View all users:
После отображения списка всех пользователей нажмите кнопку Edit для пользователя user1:
Перейдите на вкладку Role Mappings и добавьте роль user пользователю user1. Для этого выделите название роли user в колонке Available Roles, нажмите кнопку Add selected:
Название роли user переместится в колонку Assigned Roles. Сохранение выполненных настроек происходит автоматически сразу после изменения параметров, каких-то дополнительных действий для сохранения не требуется.
Аналогичные действия необходимо выполнить для второго пользователя user2.
- Для настройки совместной работы Keycloak и DataSpace необходимо получить и сохранить открытую часть ключа JWKS (JSON Web Key Sets). Для этого перейдите в браузере по адресу:
http://localhost:8080/auth/realms/todos/protocol/openid-connect/certs
На экране отобразится открытая часть ключа. Необходимо выделить весь данный текст и сохранить его в файле certs.json проекта, он пригодится нам в следующем разделе руководства.
Для более наглядного отображения содержимого certs.json можно воспользоваться функцией автоформатирования кода (в VS Code вызывается сочетанием клавиш Alt + Shift + F). После форматирования содержимое файла приобретет более читаемый вид. При необходимости данную функцию можно применять к любым файлам данного и других проектов, сделав свой код более понятным для чтения и понимания.
ВАЖНО!
Для успешной дальнейшей работы Keycloak должен быть запущен и работать в фоновом режиме все время работы с приложением!. При необходимости выполнения других команд в командной строке необходимо запустить еще один экземпляр Терминала (Mac OS) или CMD (Windows) и выполнять их там, не закрывая при этом процесс Keycloak. В VS Code это можно удобно сделать с помощью открытия новой вкладки терминала:
На этом настройка Keycloak является завершенной, можно приступать к работе с визуальным редактором моделей DataSpace.
3. Работа с моделью данных
Одним из ключевых преимуществ работы с Platform V DataSpace является возможность работать с моделью предметной области в удобном визуальном редакторе, опираясь при этом на принципы предметно-ориентированного проектирования (Domain-Driven Design, DDD).
Domain-Driven Design – это методология разработки программного обеспечения, фокусирующаяся на глубоком понимании и моделировании предметной области (домена) с целью создания систем, которые максимально соответствуют бизнес-потребностям и контексту. В основе этой методологии лежит концепция домена (domain), который представляет собой модель реального мира, описывающую конкретную предметную область.
Более подробную информацию о DDD можно найти в разделе Дополнительная информация.
Загрузка и модели предметной области в визуальном редакторе DataSpace
- Перейдите на сайт https://developers.sber.ru/studio/.
Если у Вас уже есть учетная запись на данном портале – нажмите кнопку Войти.
Если Вы на данном сайте впервые – пройдите регистрацию с помощью электронной почты или номера телефона.
- После успешной авторизации в боковом левом меню выберите Создать проект:
Выберите проект Platform V DataSpace:
Укажите имя проекта, например, todos:
Добро пожаловать в визуальный редактор моделей DataSpace!
В DataSpace есть возможность как вручную создать новую модель данных предметной области, так и импортировать готовую модель в формате XML. В данном руководстве мы используем готовую модель.
- Для выполнения импорта модели нажмите на иконку импорта в верхней панели инструментов и выберите файл model.xml из локального проекта (dataspace_quickstart):
После завершения импорта отобразится модель предметной области проекта:
Визуальный редактор DataSpace обладает богатыми возможностями по визуальному проектированию моделей данных. Более подробно об этом можно узнать в разделе Дополнительная информация.
- После загрузки модели данных в редактор необходимо осуществить Выпуск модели. При осуществлении данного процесса DataSpace автоматически разворачивает базу данных, инструменты мониторинга, другие необходимые сервисы и инструменты для последующей работы с данными. Для выпуска модели нажмите на кнопку Выпустить верхней панели инструментов:
По умолчанию стартовая версия модели – 0.0.1, согласитесь с данными настройками, нажав кнопку Выпустить:
Далее запустится процесс выпуска модели. Обычно процесс занимает около 10 минут, при этом ход процесса отображается в модальном окне. В это время Вы можете ознакомиться с дальнейшими шагами или посмотреть раздел Дополнительная информация.
По завершении выпуска модели будет выведено уведомление:
После нажатия кнопки ОК укажите новую версию модели (согласиться с 0.0.2):
Поздравляем! Вы успешно выпустили модель данных DataSpace!
Подключение локального проекта (React-приложение, Keycloak) к DataSpace.
В данный момент у нас уже есть выпущенная на предыдущем шаге модель данных и локальный проект, скачанный с GitVerse. Необходимо осуществить их связывание, интеграцию. Для этого выполните следующие шаги:
- В визуальном редакторе моделей откройте вкладку Разрешения. Здесь сосредоточены различные параметры управления безопасностью, доступом к данным. В проекте для обеспечения механизма аутентификации используются популярная технология OAuth 2.0 и JWT-токены. Для работы с данными инструментами необходимо передать DataSpace открытую часть ключа, сохраненную ранее в файле certs.json. Для этого нажмите на кнопку Загрузить JSON WebKey Sets и укажите файл certs.json.
- Далее необходимо передать DataSpace информацию о разрешенных GraphQL-запросах от клиентского приложения. Для этого, находясь на вкладке Разрешения, нажмите на кнопку Импорт разрешений и укажите файл permissions.json из локального проекта.
После успешной загрузки будет выведено соответствующее уведомление, и в визуальном редакторе отобразится список всех разрешенных к выполнению запросов. В данном разделе редактора возможно удобно их редактировать, расширять и при необходимости удалять.
Настройка endpoint GraphQl
Завершающим шагом интеграции локального проекта и DataSpace является настройка endpoint для GraphQL-запросов.
Endpoint - это точка доступа или конечный пункт назначения, куда направляются запросы от клиента к серверу. Это могут быть URL-адреса, по которым клиент связывается с определенными службами или ресурсами на сервере. Клиент обычно взаимодействует с одним или несколькими точками доступа для выполнения своих задач, таких как получение данных, выполнение операций или обмен сообщениями. В случае с DataSpace мы используем единую точку доступа для всех GraphQL-запросов, что несет в себе целый ряд преимуществ перед традиционным REST-подходом.
- Для настройки endpoint откройте вкладку Детали визуального редактора DataSpace. В данном разделе отображаются ссылки для обращений к API DataSpace различного типа. В данном проекте нам нужна Ссылка на endPoint jwt graphql. Скопируйте ее значение в файл .env локального проекта как значение переменной DS_ENDPOINT.
Более подробную информацию о работе с языком запросов GraphQl можно найти в разделе Дополнительная информация.
На этом интеграция локального проекта (React-приложение, Keycloak) и DataSpace завершены.
4. Настройка frontend-части приложения
Локальный проект представляет собой React-приложение. В качестве сборщика используется Webpack, библиотека визуальных компонентов - Antd. Проект написан на TypeScript и для знакомства с ним необходимо хотя бы базовое знание JavaScript. Также в проекте для удобного доступа к данным и работы с GraphQL-запросами используются Apollo Client и GraphQL code generator.
GraphQL codegen generator
В экосистеме GraphQL существует инструмент GraphQL code generator позволяющий осуществить автоматическую генерацию TypeScript-типов на основе GraphQL-схемы и GraphQL-запросов. Это позволяет ускорить разработку, сделать ее более удобной, а также минимизировать риски ручного написания типов.
В данном проекте автоматическая кодогенерация уже выполнена, файл TypeScript-типов src/__generate/requests.ts создан, каких-либо дополнительных действий не требуется. Однако, в случае изменения GraphQL-схемы проекта или GraphQL-запросов есть возможность в любой момент автоматически сгенерировать новый файл requests.ts c учетом изменений следующей командой:
npm codegen
Конфигурационным файлом кодогенерации является codegen.yml. В нем указываются названия файлов GraphQL-схемы (schema.graphql) и GraphQL-запросов (requests.graphql), используемых для генерации, а также название выходного файла кодогенерации (requests.ts).
Более подробную информацию о GraphQL codegen можно найти в разделе Дополнительная информация.
Для развертывания frontend-части проекта выполните следующие шаги:
- Откройте новое окно Терминала (Mac OS) или командной строки (CMD, Windows). Проверьте корректность установки Node.js, выполнив команду:
node -v
Если Node.js установлен корректно - будет выведена его текущая версия. В противном случае обратитесь к технической документации по Node.js для решения возникших проблем.
Далее необходимо скачать NPM-пакеты проекта.
NPM (Node Package Manager) - это система управления пакетами для JavaScript, которая используется для установки, обновления и удаления пакетов. Она позволяет разработчикам легко устанавливать зависимости для проектов, используя удобный интерфейс командной строки. NPM также предоставляет возможность публикации собственных пакетов, что делает его полезным инструментом для совместной работы над проектами.
-
Проверьте, что в системе не активирован какой-либо VPN-сервер, в особенности - корпоративный. Часто именно с этим связаны проблемы со скачиванием пакетов проекта.
-
Перейдите в командной строке в рабочую папку dataspace_quickstart и выполните команду:
npm install
NPM обратится к файлу package.json проекта, содержащему информацию о всех необходимых для работы приложения npm-пакетах а также их версиях, скачает эти пакеты. По завершении работы команды в консоль будет выведена диагностическая информация о завершении установки, в проекте будет создана новая директория node_modules, содержащая скачанные пакеты.
На этом развертывание и предварительная настройка проекта "Список задач" завершены, приложение готово к работе. В следующем разделе будет продемонстрирована практическая работа приложения и его возможности.
5. Демонстрация работы приложения
Для запуска приложения в командной строке перейдите в рабочую папку dataspace_quickstart и выполните команду:
npm start
В командной строке будет выведена диагностическая информация о процессе сборки проекта. По окончанию данного процесса произойдет автоматическое открытие браузера и переход по адресу: http://localhost:3000/.
ВАЖНО! Еще раз обращаем внимание, что для успешной работы с проектом IAM-менеджер Keycloak должен постоянно работать в фоновом режиме (отдельном окне командной строки, терминала). Его работа обеспечивает возможность аутентификации пользователей в приложении, выполнение запросов данных к DataSpace.
После запуска откроется страница аутентификации, войдите с именем и паролем ранее созданного пользователя user1, pass: 12345 (если не указали иные данные).
ВАЖНО! Пароли вида 12345 допускается использовать исключительно в тестовых и демонстрационных целях. Для применения в любых практических производственных процессах допустимо использовать артефакты аутентификации только достаточной криптографической стойкости, учитывая длину набора символов, наличие символов в разных регистрах, спецсимволов и тд.
После успешной аутентификации откроется главная страница приложения, на ней происходит вся работа с задачами: создание, изменение, удаление, а также предоставление прав доступа разного уровня (просмотр, изменение).
Интерфейс приложения состоит из трех основных компонентов:
- Верхняя панель информации (с именем текущего пользователя и кнопкой выхода).
- Форма добавления новой задачи.
- Список задач текущего пользователя.
Изначально в базе данных нет ни одной задачи, список задач текущего пользователя пуст.
Создадим новую задачу, заполнив все поля и нажав кнопку Add Task. Добавленная задача отобразится в списке задач:
Разберем подробнее столбцы Access и Action
Поле Access отвечает за отображение информации о правах доступа к задаче. По умолчанию автору задачи присваивается уровень доступа OWNER (Владелец), с которым он может изменять задачу, удалять ее, а также добавлять другим пользователям права доступа на чтение и изменение задачи. Данное свойство присваивается пользователю автоматически при создании задачи и изменить его (назначить задаче нового владельца) нельзя.
Поле Action отображает две кнопки действий с задачей - изменение и удаление.
При вызове изменения задачи открывается модальное окно, в котором можно изменить значения всех свойств задачи, а также назначить необходимые права доступа определенным пользователям:
ВАЖНО!
В поле Access данного модального окна мы указываем имя пользователя, которому планируем предоставить доступ к задачи. При этом происходит поиск имени данного пользователя в DataSpace. Данные о существующих пользователях системы вносятся в DataSpace при их авторизации в приложении.
Соответственно, если пользователь user1 планирует, например, дать доступ к задаче пользователю user2, то он сможет найти его в списке пользователей только при условии, что пользователь user2 хотя бы один раз проходил аутентификацию в системе и, соответственно, данные о нем были внесены в DataSpace.
Также отметим, что поиск имени пользователя в поле Access происходит по точному вхождению, т.е. необходимо указать полное имя пользователя "user1". По частичным данным, например, "use" пользователь найден не будет.
Демонстрация механизма делегирования прав доступа к задачам
- Выйдем из текущего пользователя user1, нажав кнопку Loguot в правом верхнему углу страницы, и авторизуемся под ранее созданным пользователем user2. Отобразится пустой список задач пользователя user2 - все верно, пока доступа к задачам user1 у него нет.
- Вернемся обратно в учетную запись user1. В списке задач нажмем на кнопку редактирования задачи, откроется модальное окно. В поле Access укажем логин user2, в соседнем поле выберем READ, далее нажмем кнопку Add.
В список доступов ниже добавится пара значений user2:READ. Чтобы зафиксировать выполненные изменения нажмем кнопку Edit.
Обновленные данные сохранятся в DataSpace, информация о новом доступе также отобразится в разделе Access списка задач.
- Перейдем в учетную запись user2. В списке задач появилась задача, изначально созданная пользователем user1. В поле Access мы увидим добавленный доступ user2:READ. Теперь пользователь user2 имеет доступ к этой задаче на чтение, при этом изменить или удалить ее он пока не может.
-
Вернемся в учетную запись user1, откроем задачу и, предварительно удалив доступ user2:READ, добавим новый доступ с возможностью редактирования для пользователя user2 -> user2:WRITE, сохраним выполненные изменения.
-
Снова перейдя в учетную запись user2, мы увидим новый добавленный доступ user2:WRITE и кнопки редактирования и удаления задачи. Теперь у пользователя user2 есть возможность редактировать и удалять задачу, созданную пользователем user1.
Часто встречающиеся ошибки
Данная ошибка связана с нарушением связи между локальным проектом и сервером DataSpace. Чаще всего это бывает связано с использование каких-либо корпоративных VPN-серверов, работы в изолированном сетевом сегменте.
Решение - отключение VPN, использование для целей обучения личного устройства.
Данная ошибка связана тем, что текущий JWT-токен, используемый для аутентификации, был просрочен. В рамках системы безопасности у JWT-токенов есть срок действия, после его завершения необходимо их обновление, это требуется с целью обеспечения безопасности.
Решение - закрыть окно ошибки, выйти из текущей учетной записи и снова зайти.
На этом демонстрация основных возможностей приложения Platform V DataSpace "Список задач" завершена. В следующем разделе Дополнительная информация Вы можете найти более подробную информацию о применяемых в приложении технологиях и инструментах.
Дополнительная информация
Интерфейс визуального редактора моделей DataSpace
Редактор моделей DataSpace обладает богатыми возможностями по работе с моделями предметной области любой сложности. Рассмотрим основные элементы редактора и их предназначение на примере уже загруженной ранее модели.
Управление отображением
Находясь в редакторе, в нижнем левом углу Вы можете найти панель управления отображением. В ней сосредоточены настройки внешнего вида модели, управления масштабом, а также отображением связей:
Темная тема
При необходимости в визуальном редакторе можно активировать темную тему:
Контекстное меню
У большинства элементов модели есть возможность вызвать контекстное меню правой кнопкой мышки. При этом набор пунктов контекстного меню зависит от типа элемента, для которого оно вызвано.
Контекстное меню агрегата:
Контекстное меню класса:
При клике правой кнопкой на пустом месте откроется контекстное меню, посредством которого можно создать новый элемент модели (агрегат, класс, перечисление и др.).
Панель свойств
Если выделить любой элемент модели (агрегат, класс, свойство) и нажать указанную на рисунке ниже кнопку - откроется Панель свойств. В ней есть возможность редактировать свойства любых элементов модели, конкретный набор доступных параметров зависит от типа выбранного элемента.
При открытии панели свойств без какого-либо выделенного элемента модели в ней отображаются свойства самой модели, есть возможность создать новые элементы (агрегат, класс, перечисление и др.)
Конструктор GraphQL-запросов
Данный инструмент позволяет писать и выполнять GraphQL-запросы к DataSpace.
В правой части GraphQL-редактора отображаются вкладки SCHEMA и DOCS.
Вкладка SCHEMA позволяет выгрузить GraphQL-схему данных в форматах JSON и SDL. Эта возможность бывает часто востребована при интеграции DataSpace с внешними системами, приложениями.
Вкладка DOCS позволяет получить справочную информацию о доступных GraphQL-запросах (QUERIES, MUTATIONS) и их параметрах (аргументы, тип данных, дополнительные условия, сортировка и тд.)
Детали - адреса подключения для различных типов запросов к API DataSpace
На данной странице можно найти URL-адреса для подключения к API DataSpace (endpoint) и получения различных данных. В данном проекте используется Ссылка на endPoint jwt graphql, так как в приложении применяется механизм аутентификации на основе JWT-токенов.
Разрешения - управление параметрами безопасности и правами доступа запросов
В данном разделе сосредоточены инструменты настройки прав доступа для запросов к DataSpace. Есть возможность как импортировать/экспортировать разрешения в файл/из файла так и вручную создать новое разрешение, определив для него необходимые параметры.
Документация
При необходимости можно получить дополнительную информацию о работе с DataSpace в документации. Для этого необходимо кликнуть на значок с вопросительным знаком, изображенный на схеме ниже:
Руководство оператора содержит подробную техническую информацию об основных аспектах работы с DataSpace, большое количество скриншотов, а также документацию по специальному языку Строковых выражений и Системе разграничения доступа GraphQL-запросов. В случае необходимости поиск по документу можно осуществить по нажатию клавиш Ctrl+F в браузере.
Предметно-ориентированное проектирование
Предметно-ориентированное проектирование (Domain-Driven Design, DDD) – это подход к разработке программного обеспечения, который фокусируется на понимании и моделировании ключевых концепций и процессов в конкретной области деятельности (домене).
Предметно-ориентированное проектирование (DDD) является мощным инструментом для разработчиков, стремящихся создавать качественное и масштабируемое программное обеспечение. Эта методология помогает глубже погружаться в предметную область, строить эффективные модели и создавать высококачественный код.
DDD можно использовать для различных языков программирования так как данный подход фокусируется на создании моделей предметной области, которые представляют бизнес-логику и данные приложения. Эти модели могут быть реализованы в любом языке программировании, который поддерживает необходимый уровень абстракции и позволяет четко разделить логику от данных.
Основные принципы DDD:
- Концентрация на домене: основной акцент делается на понимании и моделировании предметной области, чтобы максимально эффективно удовлетворить потребности бизнеса.
- Осведомленность о домене (Domain Knowledge): разработчики должны обладать глубокими знаниями о предметной области и работать вместе с экспертами в этой области, чтобы создать точную и реалистичную модель.
- Уровни абстракции: система делится на разные уровни абстракций, начиная от общих понятий и заканчивая конкретными деталями. Это помогает структурировать код и сделать его более понятным.
- Моделирование в терминах домена: код и архитектура системы должны использовать термины и концепции, характерные для данной предметной области. Это упрощает понимание кода и улучшает его поддержку.
- Агрегаты и границы: концепция агрегатов используется для группировки связанных объектов и определения границ взаимодействия между ними. Это уменьшает сложность системы и повышает ее целостность.
- Примеры использования (Use Cases): примеры использования помогают визуализировать работу системы в разных сценариях и используются для тестирования и поиска узких мест.
Эти принципы направлены на создание гибкой и устойчивой архитектуры, которая хорошо интегрируется с бизнес-требованиями и легко адаптируется под изменения.
Ключевые элементы предметной области:
- Агрегаты: это основные единицы моделирования, представляющие собой группы связанных объектов, работающих вместе. Агрегат имеет единую точку ответственности и контролирует изменение состояния своих составляющих.
- Доменные объекты: объекты, представляющие важные концепции в предметной области. Они могут быть либо агрегатами, либо составляющими агрегата. Доменные объекты обычно имеют строгие ограничения и бизнес-правила, которые определяют их поведение.
- Сервисы: управляющие компоненты, которые предоставляют операции, связанные с доменной логикой. Сервисы обрабатывают запросы и отвечают за выполнение бизнес-функций.
- Репозитории: компоненты, отвечающие за хранение и управление доменными объектами. Они обеспечивают доступ к данным в соответствии с доменным соглашением.
- Модели событий: механизм для публикации и обработки событий, происходящих в системе. Модель событий обеспечивает возможность распределения задач и синхронизацию данных между различными частями системы.
- Разделение слоев: подход к разделению системы на логические слои, такие как пользовательский интерфейс, доменная модель и инфраструктура. Это помогает улучшить читаемость кода и упростить его поддержку.
- Контроллеры и интеграционные точки: контроллеры управляют взаимодействием между внешним миром и доменной моделью, тогда как интеграционные точки обеспечивают взаимодействие с другими системами.
- Источники истины: единые источники данных, которые используются всеми компонентами системы для получения информации. Источники истины могут быть как внутренними (например, базы данных), так и внешними (API других систем).
- Единая точка входа: архитектурный компонент, который служит единственным способом доступа к доменной модели из внешних источников. Это обеспечивает централизованное управление и контроль доступа.
Данные элементы позволяют разработчикам создавать сложные системы, которые эффективно моделируют бизнес-процессы и хорошо интегрируются с другими системами.
Преимущества DDD:
- Лучшее понимание требований бизнеса: DDD способствует глубокому пониманию бизнес-процессов и потребностей пользователей.
- Улучшенная структура кода: использование уровней абстракций и моделей домена делает код более чистым и поддерживаемым.
- Повышение производительности: хорошо спроектированные модели позволяют сократить время разработки и повысить производительность системы.
- Легкость расширения и адаптации: модульная структура позволяет легко добавлять новые функции и изменять существующие без значительных переделок.
Примеры применения DDD:
-
Система управления складом: доменная модель может включать такие сущности, как товары, заказы, клиенты, поставщики и т.д. Каждая сущность будет иметь свои свойства и методы, отражающие их поведение в реальной жизни. Например, товар может иметь уникальный идентификатор, цену, количество на складе и т.п.
-
Интернет-магазин: здесь домен включает категории товаров, покупателей, заказов, способов оплаты и доставки. Каждый из этих элементов имеет свои особенности и требования к обработке данных. Например, покупатель может создать заказ, выбрать способ доставки и оплатить товар.
-
CRM-система: доменная модель CRM-системы может включать клиентов, сделки, задачи, контактные данные и т.д. Каждая сущность связана с определенным контекстом и действиями, которые могут быть выполнены над ней. Например, задача может быть назначена на конкретного сотрудника, выполнена или перенесена на другой срок.
Процесс внедрения DDD:
- Понимание предметной области: проведите исследование предметной области, изучите бизнес-процессы и требования к системе. Постарайтесь глубоко погрузиться в суть задачи и выявить ключевые понятия и взаимосвязи.
- Создание концептуальной модели: начните с создания концептуальной модели, которая будет описывать высокоуровневую структуру системы и её основные компоненты. Используйте UML-диаграммы классов или другой инструмент визуализации.
- Выявление доменов и агрегатов: определите основные домены (области знаний) и их границы. Затем выделите внутри каждого домена агрегаты – ключевые объекты, вокруг которых строится логика.
- Детализация моделей: расширьте концептуальную модель, добавив дополнительные классы, методы и свойства. Убедитесь, что все объекты и связи между ними полностью отражают бизнес-логику.
- Реализация доменной логики: переведите концептуальные модели в технический код. Для этого можно использовать фреймворки или библиотеки, поддерживающие DDD, такие как Spring Framework или .NET Core. Интеграция с существующей инфраструктурой: если у вас уже есть работающая система, определите, как новая доменная модель будет интегрироваться с ней. Возможно, потребуется внести изменения в существующий код.
- Тестирование и верификация: создайте тестовые сценарии для проверки каждой части системы. Используйте unit-тесты, интеграционные тесты и другие виды тестирования для обеспечения качества кода.
- Обновление документации: опишите новые архитектурные решения и изменения, внесенные в систему. Это поможет другим участникам команды лучше понимать проект и облегчит поддержку и дальнейшее развитие.
- Мониторинг и оптимизация: после внедрения DDD продолжайте следить за производительностью системы и ее соответствием требованиям. Вносите необходимые улучшения и корректировки по мере необходимости.
Главные книги по DDD: красная, синяя и зелёная
DDD — довольно старый подход. Его использование выглядит разумным и вполне оправданным, но почему-то он всё ещё мало распространён. Есть предположение, что основная проблема в дефиците учебных материалов. Вся теория описана в нескольких книгах: красной, синей и зелёной.
Если Вы решили начать изучать литературу по DDD, то лучше всего начать с «зелёной» книги. В ней автор Вон Вернон верхнеуровнево освещает данный подход и на простых примерах показывает его преимущества.
Полезные ссылки
Видео:
"Владимир Хориков — Domain-driven design: Cамое важное"
"Что такое DDD за 10 минут с примерами"
Статьи:
"Domain-Driven Design Quickly(ENG)"
"Domain-Driven Design: стратегическое проектирование. Часть 1"
"Domain-Driven Design: тактическое проектирование. Часть 2"
"Domain-driven design: рецепт для прагматика"
"DDD на практике. Проектирование списка желаний"
Язык запросов GraphQL
GraphQL — это язык запросов и API-интерфейс для управления данными, который был создан компанией Facebook в 2012 году. Он предоставляет разработчикам возможность описывать структуры данных и их взаимоотношения, а также осуществлять запрос этих данных через API.
В отличие от REST, который использует URL для определения запроса, GraphQL использует язык запросов, который позволяет клиенту указать, какие данные ему нужны. Это позволяет серверу возвращать только те данные, которые действительно нужны клиенту, что делает его более эффективным и быстрым.
GraphQL стал популярным инструментом среди разработчиков благодаря своим преимуществам в производительности, удобстве и прозрачности работы с данными. Этот инструмент нашел применение в различных сферах, от социальных сетей до e-commerce, и продолжает развиваться, предлагая новые возможности и решения для современных веб-приложений.
Основные принципы GraphQL:
-
Объявление схемы: в начале работы создаётся схема, которая описывает все возможные данные и операции, доступные через API. Эта схема служит соглашением между клиентом и сервером о том, какие данные могут быть запрошены и как они будут представлены.
-
Стратегия выборки данных: клиент может выбирать только те данные, которые ему нужны, без необходимости запрашивать всю информацию. Это уменьшает нагрузку на сервер и повышает эффективность передачи данных.
-
Статический тип данных: GraphQL использует статические типы данных, что позволяет избежать ошибок на этапе компиляции. Это делает разработку более предсказуемой и помогает предотвратить ошибки в процессе выполнения запросов.
-
Фасадный API: все данные, которые могут быть получены от API, доступны через одну точку входа. Это упрощает интеграцию и управление различными источниками данных.
-
Модульность и повторное использование кода: графы запросов позволяют создавать модульные и легко расширяемые API. Повторное использование графа запроса упрощает создание новых API.
-
Ответственность клиента: задача клиента состоит в том, чтобы выбрать необходимые данные и сформировать запрос к серверу. Сервер же отвечает только за обработку запроса и предоставление соответствующих данных.
-
Типизация и структурирование данных: данные, передаваемые через GraphQL, должны быть строго типизированы и структурированы. Это позволяет клиентам получать данные в нужном формате и использовать их без дополнительных преобразований.
-
Масштабируемость и гибкость: благодаря своей структуре, GraphQL является масштабируемым и гибким решением. Оно позволяет легко добавлять новые данные и изменять существующие схемы без переписывания всего API.
-
Синтаксис и спецификация: язык и спецификации GraphQL основаны на стандартах, что делает его легким для изучения и внедрения.
Преимущества использования GraphQL:
-
Оптимизация трафика: за счет точного определения нужных данных GraphQL позволяет существенно снизить количество запросов к серверу и объем передаваемой информации. Это особенно важно при работе с мобильными приложениями.
-
Удобство разработки: благодаря интроспекции разработчикам легче понять структуру данных и писать код, что сокращает время на разработку и тестирование.
-
Масштабируемость: GraphQL легко масштабируется благодаря своей гибкости и способности эффективно работать с большими объемами данных.
-
Прозрачность: прозрачность передачи данных и легкость проверки запросов делают GraphQL привлекательным для команд разработчиков, работающих над крупными проектами.
Основные элементы GraphQL-запроса:
-
Оператор - определяет тип запроса, который может быть одним из следующих: query, mutation или subscription.
-
Поля - определяют данные, которые клиент хочет получить от сервера. Они указываются после оператора и разделены запятыми.
-
Аргументы - используются для передачи дополнительных данных в запрос. Они указываются после имени поля и разделены запятыми.
GraphQL-схема
GraphQL-схема - это описание структуры данных, которые могут быть запрошены с сервера GraphQL, а также всех возможных запросов, которые могут быть выполнены к этим данным. GraphQL-схема используется для проверки корректности запросов и определения структуры данных, которые будут возвращены клиенту. При необходимости DataSpace позволяет выгружать схему модели данных в форматах SDL и JSON. Стандартное имя скачиваемой схемы - schema.graphql.
В качестве примера синтаксиса graphQL-схемы приведем фрагмент файла schema.graphql данного проекта:
type _E_Task implements _Entity & Task { id: ID! aggVersion: Long! chgCnt: Long lastChangeDate: _DateTime ownerId: String description: String dueDate: _DateTime status: _EN_TaskStatus timeStamp: _DateTime title: String type: String! tags( cond: String limit: Int offset: Int sort: [_SortCriterionSpecification!] ): _ENC_TaskTag! accessList( elemAlias: String cond: String limit: Int offset: Int sort: [_SortCriterionSpecification!] ): _EC_TaskCustomerAccess! customer: _G_CustomerReference! _calc: _Calculation!}
В данном коде описывается тип данных _E_Task (задача) и все его поля (свойства), которыми он обладает.
Типы запросов GraphQL
Query-запросы используются для получения данных от сервера(чтение). Они позволяют детально определить, какие данные необходимо получить, а также их структуру. Есть возможность указывать дополнительные условия фильтрации, ограничение количества значений в запросе, сортировку и многое другое.
Рассмотрим пример query-запроса из файла requests.graphql данного проекта:
query getCustomerInfo($cond: String!) { searchCustomer(cond: $cond) { elems { ...CustomerAttributes } }}
fragment CustomerAttributes on _E_Customer { id login email}
Данный запрос позволяет получить данные пользователя (id, login, email). В качестве параметра запроса используется переменная $cond типа String (строка). Также в данном запросе присутствует т.н. фрагмент graphql - часть запроса, которая может быть использована в других запросах. Фрагменты применяются для предотвращения дублирования блоков кода и улучшения читаемости.
Mutation-запросы используется для изменения данных на сервере (создание, удаление, обновление), а также для управления транзакциями и контроля над параллелизмом.
Рассмотрим еще один фрагмент файла requests.graphql:
mutation createTask($input: _CreateTaskInput!) { packet { createTask(input: $input) { customer { entityId } ...TaskAttributes } }}
fragment TaskAttributes on _E_Task { id title status dueDate description timeStamp tags { elems } accessList { elems { ...TaskCustomerAccessAttributes } } customer { entity { ...CustomerAttributes } }}
Запрос createTask позволяет создать новую задачу. Здесь также используется фрагмент TaskAttributes, содержащий все необходимые поля задачи.
Полезные ссылки:
https://studio.apollographql.com/sandbox/explorer
https://habr.com/ru/companies/ruvds/articles/445268/
Видео:
GraphQL Course for Beginners (ENG)
GraphQL Course for Beginners (ENG)
Что такое GraphQL за 15 минут с примерами (RUS)
GraphQL Codegen
GraphQL Codegen – это инструмент для генерации клиентского кода при использовании GraphQL. Он помогает разработчикам автоматизировать процесс создания API-клиентов для различных языков программирования, включая JavaScript, TypeScript, Python, Go и многие другие.
Основные возможности GraphQL Codegen:
-
Поддержка различных типов данных: GraphQL Codegen поддерживает широкий спектр типов данных, таких как scalars, enums, interfaces, unions, input objects и другие. Это позволяет легко интегрировать кодген с любым типом схемы GraphQL.
-
Поддержка нескольких языков: инструмент может генерировать клиентский код на разных языках программирования. Это делает его универсальным решением для разработчиков, работающих над различными проектами.
-
Управление версиями: GraphQL Codegen поддерживает управление версиями схем, что позволяет разработчикам легко переходить между разными версиями API без необходимости ручного обновления кода.
-
Полная интеграция с инструментами разработки: GraphQL Codegen может быть интегрирован с популярными инструментами разработки, такими как Next.js, Apollo Server, Prisma и другими. Это значительно упрощает процесс разработки и улучшает качество кода.
Основные шаги работы GraphQL codegen:
- Сборка схемы: Разработчик предоставляет файлы схемы GraphQL, которые описывают структуру данных и операции, доступные через API.
- Анализ схемы: GraphQL Codegen анализирует схему, определяет типы данных и операции, которые будут доступны клиенту.
- Генерация кода: На основе анализа схемы генерируется клиентский код, который будет использоваться для взаимодействия с сервером GraphQL. Этот код включает классы, интерфейсы, функции и другие элементы, необходимые для работы с API.
- Интеграция с проектом: Генерированный код автоматически добавляется в проект разработчика, обеспечивая готовую инфраструктуру для работы с GraphQL API.
Полезные ссылки:
https://www.apollographql.com/tutorials/lift-off-part1/09-codegen
https://the-guild.dev/graphql/codegen
https://github.com/dotansimha/graphql-code-generator
https://www.graphql-cli.com/codegen/
JWT (JSON Web Token)
JWT (JSON Web Token) — это стандарт безопасности, который используется для обмена информацией между клиентом и сервером в формате JSON. Основная цель JWT заключается в том, чтобы передавать данные в безопасном виде, защищая их от подделки и расшифровки. JWT широко применяется в веб-приложениях, мобильных приложениях и API для аутентификации пользователей и управления доступом к ресурсам.
Принципы работы JWT:
- Создание токена: клиент (например, браузер пользователя) отправляет запрос на сервер с идентификационной информацией (username, password). Сервер проверяет эту информацию и генерирует уникальный JWT-токен.
- Передача токена: после успешной проверки клиент получает JWT-токен вместе с кодом состояния HTTP.
- Обработка токена: затем клиент передает этот токен обратно на сервер при каждом последующем запросе.
- Аутентификация и проверка: сервер принимает JWT-токен и проверяет его валидность. Если токен действительный, сервер предоставляет доступ к ресурсу.
- Управление сроком жизни токена: время жизни JWT может быть ограничено (например, через expiration time). Это обеспечивает безопасность данных и предотвращает возможный взлом после истечения срока действия токена.
Структура JWT-токена
Рассмотрим пример JWT-токена:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJteS1oek5zTldOTllhbGRuTWxLWHBQemtkVE5sWndWMk5QRm5Ldz09IiwiaWF0IjoxNTgzMDczNDk5LCJleHAiOjE1ODMwNzM0OTksIm5iZiI6MTU4MzA3MzQ5OSwiYXVkIjoiNTRhNGU2MGEtZDU0NS00NDE4LTg5YzItNjY4Nzk0ZGU2OWU0Iiwic3ViIjoiMSIsIm5hbWUiOiJrbGVha2luZ19zaG93cy5jb20iLCJhdWQiOiJrbGVha2luZ19zaG93cy5jb20ifQ.hauOayj3kiCgyWEue7ExSQkGs0qE0KZ7e6d6e0N1idA
При внимательном анализе можно заметить, что текст токена состоит из трех частей разделенных точкой. Для декодирования и анализа содержания JWT-токена удобно использовать сайт: https://jwt.io/#debugger-io:
Header: Эта часть содержит информацию о типе подписи токена и алгоритме хеширования, который использовался при создании токена. Например:
{ "alg": "HS256", "typ": "JWT"}
Payload: В этой части содержится сама информация, которую нужно передать от одного узла к другому. Информация обычно кодируется в формате Base64URL и заключена в фигурные скобки. Вот пример payload:
{ "sub": "1", "iat": 1583073499, "exp": 1583073499, "nbf": 1583073499, "aud": "kleaking_shows.com", "name": "kleaking_shows.com"}
Signature: Это третья часть токена, содержащая подпись токена. Она генерируется путем шифрования Header + Payload с использованием секретного ключа. Подпись также кодируется с помощью Base64URL.
Преимущества JWT:
- Безопасность: использование алгоритмов шифрования и хеширования позволяет защитить данные от перехвата и подделок.
- Сжатие информации: JWT использует компактную структуру, которая уменьшает объем передаваемых данных, улучшая производительность сети.
- Отсутствие зависимостей: для работы с JWT требуется только базовая поддержка JSON, что делает его независимым от конкретных языков программирования и платформ.
- Микросервисность: возможность передачи и хранения данных о пользователях между различными сервисами делает JWT идеальным выбором для микросервисных архитектур.
- Широкая поддержка: JWT поддерживается большинством современных фреймворков и библиотек, что упрощает интеграцию и разработку приложений.
Полезные ссылки:
https://auth0.com/docs/secure/tokens/json-web-tokens
https://habr.com/ru/articles/842056/
https://developer.auth0.com/resources/labs/tools/jwt-basics#introduction
Keycloak
Keycloak — это открытый проект, который предоставляет единую платформу для управления доступом к приложениям и сервисам. Он позволяет контролировать доступ пользователей к различным ресурсам, включая веб-приложения, мобильные приложения и API. KeyCloak является свободным ПО с открытым кодом, распространяемым по лицензии Apache License 2.0. Разработан компанией RedHat, Inc.
Возможности Keycloak:
-
Управление пользователями: создание, изменение и удаление пользователей, управление паролями и аутентификацией.
-
Управление ролями: назначение ролей пользователям, которые определяют их привилегии и разрешения.
-
Аутентификация: поддержка различных методов аутентификации, таких как логин/пароль, SSO, OAuth, OpenID Connect и другие.
-
Авторизация: контроль доступа к ресурсам на основе ролей и привилегий пользователей.
-
Управление доступом: управление доступом к приложениям и сервисам на основе правил и политик.
-
Интеграция: поддержка различных систем управления доступом, таких как LDAP, Active Directory и другие.
-
Настройка: возможность настройки параметров системы в соответствии с требованиями конкретного проекта или организации.
Основные объекты Keycloak:
-
Realm - область приложения, рабочее пространство, в которой пользователи могут быть авторизованы и получать доступ к различным ресурсам. Realm позволяет настраивать внешний вид страницы логина для каждой отдельной области. Кроме того, в каждом realm возможна регистрация пользователей, авторизация через социальные сети, Single Sign-On/Sign-Off для всех приложений данного realm, выдача JSON Web Token подлинности аккаунтам, двухфакторная аутентификация и интеграция со службами каталогов (LDAP-сервером). Таким образом, realms в Keycloak обеспечивают гибкость и масштабируемость системы безопасности для различных приложений и сервисов.
-
Client - приложение или система, которые использует Keycloak для аутентификации своих пользователей. Клиенты могут быть настроены в Keycloak путем создания нового приложения или выбора существующего. Это позволяет клиентам использовать функции Keycloak, такие как аутентификация, управление пользователями и ролью, а также другие возможности безопасности. Клиент в Keycloak может быть подключен к серверу для предоставления доступа к своим ресурсам пользователям, которые были успешно аутентифицированы Keycloak.
-
User - пользователь системы, который проходит процесс аутентификации и получает доступ к ресурсам. Пользователь обычно имеет уникальный идентификатор и учётную запись, позволяющую ему пройти аутентификацию и получить разрешение на доступ к определённым ресурсам.
-
Role - роль пользователя в системе. Роли определяют права и привилегии, которыми обладает пользователь, и позволяют управлять доступом к ресурсам. Role может быть назначена конкретному пользователю или группе пользователей, она определяет, какие действия они могут выполнять в рамках системы.
Полезные ссылки:
https://github.com/keycloak/keycloak
https://habr.com/ru/articles/716232/
https://rutube.ru/video/3e11c9cba50c3cb96eebe42bfe17f3be/?r=wd
Ссылки
Сайт СберТеха:
https://platformv.sbertech.ru/
Канал Platform V на Rutube:
https://rutube.ru/channel/30199350/
Инструменты Сбера для разработчиков:
https://developers.sber.ru/
TG-канал Sber Developer News:
https://t.me/SberDeveloperNews
TG-группа developers.sber.ru:
https://t.me/smartmarket_community
Habr:
https://habr.com/ru/companies/sberbank/
Благодарим за внимание! Успехов!
Описание
Быстрый старт Platform V DataSpace
https://platformv.sbertech.ru/products/instrumenty-razrabotchika/dataspace
Языки
TypeScript
- CSS
- JavaScript
- HTML