Авторизация¶
Авторизация и отправка HTTP-запроса¶
Чтобы HTTP-запрос был обработан, он должен пройти авторизацию по токену приложений.
Заранее сгенерированный (например, в веб-интерфейсе TDG) токен приложений
необходимо передать в HTTP-заголовке запроса по схеме Authorization: Bearer <token>
, где:
Authorization
– имя заголовка;Bearer
– схема HTTP-аутентификации;<token>
– ключ токена.
Пример
Authorization: Bearer 2fc136cf-8cae-4655-a431-7c318967263d
Важно
Токен должен быть сформирован в кластере TDG, к которому осуществляется доступ, иначе он не пройдет авторизацию. Кроме того, ему должны быть выданы соответствующие права для выполнения операций чтения и записи с объектами модели данных.
В HTTP-запросе в заголовке указывается один из двух вариантов схемы данных:
схема
default
(по умолчанию) – работа с пользовательскими данными. Если схема данных в заголовке пропущена, для запроса используется схемаdefault
.схема
admin
– управление настройками TDG.
Для выполнения запросов в примерах ниже используется утилита curl
.
Пример запроса на добавление данных в схеме default
:
curl --request POST \
--url http://172.19.0.2:8080/graphql \
--header 'Authorization: Bearer 2fc136cf-8cae-4655-a431-7c318967263d' \
--data '{"query":"mutation{ Country(insert: { title: \"Poland\", phone_code:\"+48\"}) {title phone_code}}"}'
Пример запроса в схеме admin
:
curl --request POST \
--url http://172.19.0.2:8080/graphql \
--header 'Authorization: Bearer 2fc136cf-8cae-4655-a431-7c318967263d' \
--header 'schema: admin' \
--header 'Content-Type: application/json' \
--data '{"query":"mutation{ token{ add(name:\"App01\", role:\"user\") { name, token, created_at role } } } "}'
В запросе внешнее приложение авторизуется, используя свой заранее созданный токен,
и выпускает (генерирует) новый токен App01
.
Подробнее о генерации токена приложений через GraphQL API рассказывается в разделе
Добавление токена Руководства администратора.
Авторизация коннекторов с использованием токена приложений¶
Приложения, использующие для доступа к данным в TDG коннекторы для языков программирования, авторизуются по токенам приложений. Подробнее о настройке таких коннекторов, запросах к данным и вызове сервисов рассказано в главе Использование бинарного протокола iproto.
Чтобы авторизовать коннектор, нужно указать токен приложения непосредственно в вызываемой функции в дополнительном
аргументе credentials
. Например, запрос на вставку объекта через интерфейс репозитория
будет выглядеть следующим образом:
repository.put(type_name, obj, options, context, credentials)
где:
type_name
– тип объекта;object
– объект для вставки;options
– параметры для управления запросом;context
– контекст выполнения запроса;credentials
– таблица с данными токена приложения. Единственный обязательный параметр в таблице – это ключ токена.
Пример авторизации с использованием токена приложений на языке Python:
from tarantool.connection import Connection
conn = Connection(server.host, server.binary_port, user='tdg_service_user', password='')
admin_token = {'token': '2fc136cf-8cae-4655-a431-7c318967263d'}
obj = {'id': '12567', 'name': 'John'}
conn.call('repository.put', 'Users', obj, {}, {}, admin_token)
Запрос из примера добавит новый объект Users
с первичным ключом id
, равным 12567
,
если такой ещё не существует.