1С 8.3 Аутентификация по JWT-токену
Данные > Примеры кода 1С > 1С 8.3 HTTP
Перейти в раздел примеры кода 1С 8.3:
JSON Web Token (JWT) это открытый стандарт (RFC 7519) аутентификации для HTTP сервисов. Используется для аутентификации пользователя в клиент-серверных приложениях.
Подробно о JWT-токене: https://ru.wikipedia.org/wiki/JSON_Web_Token.
Для аутентификации токен должен быть подписан (перед отправкой) одним из 12 алгоритмов подписи токенов, поддерживаемых 1С 8.3. В параметрах пользователя можно разрешить или запретить аутентификацию по токенам. Процедура инициализации токена доступа для аутетификации JWT в 1С 8.3 доступна с версии 8.3.21.
Пример структуры JWT-токена:
{
"alg": "HS256",
"typ": "JWT"
} {
"sub": "09876",
"name": "Andy Siver",
"admin": true
}
Пример аутентификации с помощью JWT-токена в 1С 8.3:
Процедура Инициализация_JSON_Web_Token(НомерПримера) Экспорт
// Параметр: НомерПримера - это вариант исполнения 1,2 или 3
Токен = Новый ТокенДоступа;
Токен.Эмитент = "БУ";
Токен.Получатели.Добавить("УТ");
Токен.ВремяСоздания = ТекущаяУниверсальнаяДата() - Дата(1970,1,1,0,0,0);
Токен.ВремяЖизни = 5400;
Ключ = Константы.КлючПодписи.Получить();
Токен.Подписать(АлгоритмПодписиТокенаДоступа.HS256, Ключ);
// Через параметр запроса "AccessToken" или в заголовке "Authorization"
// можно передавать токен доступа в формате Base64URL (автоматически конвертируется
// в строку в формате Base64URL)
Если НомерПримера = 1 Тогда
Запрос = Новый HTTPЗапрос("http://example.com/hs/testService?AccessToken=" + Токен);
ИначеЕсли НомерПримера = 2 Тогда
Запрос = Новый HTTPЗапрос("http://example.com/hs/testService");
Запрос.ДобавитьТокенДоступа(Токен);
ИначеЕсли НомерПримера = 3 Тогда
Соотв = Новый Соответствие;
Соотв.Вставить("Authorization", "Bearer " + Токен);
Запрос = Новый HTTPЗапрос("http://example.com/hs/testService", Соотв);
КонецЕсли;
// В файле *.vrd можно указать список доверенных эмитентов токена
// (например, список информационных баз, чьим пользователям разрешен доступ по токену в данную инфобазу)
// и ключи для проверки подписи.
// Параметр: НомерПримера - это вариант исполнения 1,2 или 3
Токен = Новый ТокенДоступа;
Токен.Эмитент = "БУ";
Токен.Получатели.Добавить("УТ");
Токен.ВремяСоздания = ТекущаяУниверсальнаяДата() - Дата(1970,1,1,0,0,0);
Токен.ВремяЖизни = 5400;
Ключ = Константы.КлючПодписи.Получить();
Токен.Подписать(АлгоритмПодписиТокенаДоступа.HS256, Ключ);
// Через параметр запроса "AccessToken" или в заголовке "Authorization"
// можно передавать токен доступа в формате Base64URL (автоматически конвертируется
// в строку в формате Base64URL)
Если НомерПримера = 1 Тогда
Запрос = Новый HTTPЗапрос("http://example.com/hs/testService?AccessToken=" + Токен);
ИначеЕсли НомерПримера = 2 Тогда
Запрос = Новый HTTPЗапрос("http://example.com/hs/testService");
Запрос.ДобавитьТокенДоступа(Токен);
ИначеЕсли НомерПримера = 3 Тогда
Соотв = Новый Соответствие;
Соотв.Вставить("Authorization", "Bearer " + Токен);
Запрос = Новый HTTPЗапрос("http://example.com/hs/testService", Соотв);
КонецЕсли;
// В файле *.vrd можно указать список доверенных эмитентов токена
// (например, список информационных баз, чьим пользователям разрешен доступ по токену в данную инфобазу)
// и ключи для проверки подписи.
//
// Подробно о параметрах пользователя информационной базы: https://its.1c.ru/db/v8321doc/bookmark/adm/TI000000123
// Подробно о файле default.vrd (настройки веб-клиента, интернет-сервисов): https://its.1c.ru/db/v8321doc/bookmark/adm/TI000000379
//
// А также настроить правила сопоставления пользователей токена и пользователей информационной базы.
// (например, если пришел токен с полем 'vrt', в котором указан МакейВН,
// то можно настроить сопоставление с полем "Имя" пользователя ИБ.
// Также можно настроить сопоставление любого поля токена с полем "Адрес электронной почты"
// или "Пользователь ОС" пользователя ИБ.
КонецПроцедуры
// (например, если пришел токен с полем 'vrt', в котором указан МакейВН,
// то можно настроить сопоставление с полем "Имя" пользователя ИБ.
// Также можно настроить сопоставление любого поля токена с полем "Адрес электронной почты"
// или "Пользователь ОС" пользователя ИБ.
КонецПроцедуры
2
комментарии
13 авг 2024
Не могу найти как получить токен с веб-сайта по технологии OAuth. Может кто поможет?
Сергей
21 фев 2023
Спасибо, нагуглил ваш пример через Bearer.
Только лучше назвать не Соотв, а Заголовки.
Только лучше назвать не Соотв, а Заголовки.
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник