Подключение AMQP-систем к «1С:Шине»
Чтобы отправлять и получать сообщения, внешние системы должны подключиться к серверу «1С:Шины» по протоколу AMQP версии 1.0. Для этого предназначены узлы процесса интеграции вида Канал1СИсточник и Канал1СНазначение. Порт брокера сервера «1С:Шины» и имя очереди для подключения вы можете узнать при помощи HTTP-сервиса описания «1С:Шины».
Аутентификация
При подключении к серверу клиентское приложение должно пройти процедуру аутентификации.
http://serverhost:port/auth/oidc/token
где
serverhost:port
имя хоста и порт, определенные в конфигурационном
файле server.yaml. Формат запроса:
POST /auth/oidc/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <ClientId:ClientSecret в кодировке Base64>
grant_type=CLIENT_CREDENTIALS
В качестве ClientId
и ClientSecret
следует указать
идентификатор и секрет клиента, полученные при создании информационных систем в
приложении «1С:Шина» ( ).
Пример:
ИдентификаторКлиента = "1_e1NvnB33xjB7IrZCqJT2WHOyR0Ew58vedLLQxXwE=";
СекретКлиента = "zd9QHBC_D9Jmurubko7xB97eJqCAQjJk5lNYp7Ny4s4=";
СтрокаBase64 = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(СтрШаблон("%1:%2",
ИдентификаторКлиента,
СекретКлиента)));
СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ПС, "");
СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ВК, "");
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
Заголовки.Вставить("Authorization", СтрШаблон("Basic %1", СтрокаBase64));
Запрос = Новый HTTPЗапрос("/auth/oidc/token", Заголовки);
Запрос.УстановитьТелоИзСтроки("grant_type=client_credentials");
Пример cURL:
curl --request POST \
--url http://localhost:9090/auth/oidc/token \
-u 1_e1NvnB33xjB7IrZCqJT2WHOyR0Ew58vedLLQxXwE=:zd9QHBC_D9Jmurubko7xB97eJqCAQjJk5lNYp7Ny4s4= \
--header "content-type: application/x-www-form-urlencoded" \
--data grant_type=client_credentials
Пример Python:
import requests
import base64
url = 'http://localhost:9090/auth/oidc/token'
id = '1_e1NvnB33xjB7IrZCqJT2WHOyR0Ew58vedLLQxXwE='
secret = 'zd9QHBC_D9Jmurubko7xB97eJqCAQjJk5lNYp7Ny4s4='
qry = '{id}:{secret}'.format(id=id, secret=secret)
basicAuthKey = base64.b64encode(str.encode(qry)).decode('ascii')
headers = {
'Authorization': 'Basic {}'.format(basicAuthKey),
'Content-Type': 'application/x-www-form-urlencoded'
}
resp = requests.post(url, headers=headers, data='grant_type=client_credentials')
if (not resp.ok):
print('Auth error: ' + resp.reason)
exit(1)
authToken = resp.json()['id_token']
В случае успешного получения билета, вы получите ответ в формате JSON:
{
"access_token" : "Not implemented",
"id_token" : "БИЛЕТ",
"token_type" : "Bearer"
}
Полученный билет должен использоваться при подключении к брокеру сервера «1С:Шины» по протоколу AMQP, а также при вызове HTTP и SOAP сервисов «1С:Шины»:
- При подключении к брокеру сервера билет указывается в качестве имени и пароля при подключении.
- При вызове HTTP и SOAP сервисов билет указывается в заголовке
Authorization в
форме:
Authorization: Bearer БИЛЕТ
Билет действителен в течение часа, поэтому если нужно сделать сразу несколько вызовов (возможно, разных сервисов), то можно использовать уже полученный билет, не вызывая снова менеджер аутентификации.
Если билет устарел, то при вызове сервиса вернется ответ с кодом 401. Это значит, что нужно снова запросить билет у менеджера аутентификации. При попытке подключиться к брокеру сервера с устаревшим билетом будет получена ошибка аутентификации.