Заметки из Зазеркалья

18.06.2021

Аутентификация с помощью JWT-токенов

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в версии 8.3.21

В версию 8.3.21 платформы 1С:Предприятия будет добавлена поддержка аутентификации с помощью JWT-токенов (стандарт RFC 7519).  Этот стандарт используется для передачи данных при аутентификации в клиент-серверных приложениях.

По сравнению с ранее принятыми способами аутентификации JWT-токены имеют ряд преимуществ (о них – ниже). Всё больше публичных сервисов используют аутентификацию через JWT-токены – например, Единая Система Авторизации И Аутентификации (ЕСИА), сервисы Министерства здравоохранения и социального развития, Национальная система цифровой маркировки «Честный знак».

С появлением поддержи JWT-токенов в платформе 1С:Предприятие можно будет реализовать, в частности, такие сценарии:

  • Вызов из приложений, созданных на платформе, внешних HTTP / веб-сервисов, поддерживающих JWT-токены.
  • Из приложения выполнить (через HTTP / веб-сервис) программный вызов функции другого приложения от лица определенного пользователя (другого приложения), но при этом не хранить/не подставлять логин и пароль этого пользователя.
    • Например, можно из магазина сделать запрос на удаленный склад для получения остатков от лица конкретного менеджера.
  • При помощи JWT-токена сгенерировать ссылку, по которой пользователю будет на определенное время предоставлен интерактивный вход в приложение (без ввода логина/пароля).
    • Можно послать новому сотруднику ссылку для первого входа в Документооборот без пароля, а в Документообороте сотрудник сможет сам установить себе пароль для дальнейшей работы.
    • Можно сформировать для сотрудника временную ссылку для входа в приложение без пароля на предмет заполнения анкеты.

Как работает аутентификация через JWT-токены

Клиент после авторизации на сервере аутентификации получает от сервера JWT-токен (подписанный секретным ключом), который клиент может в дальнейшем использовать для доступа к серверам приложений, поддерживающим этот тип аутентификации. JWT-токену может быть задано время жизни, по истечении которого токен станет недействительным.

Схема работы с JWT-токеном:

01.png

В версии 8.3.21 сервер 1С сможет выступать как сервером аутентификации, так и сервером приложений.

Преимущества JWT-токенов

  • При использовании JWT-токенов от сервера приложений не требуется хранение дополнительных данных о выданных сессиях: все, что должен сделать сервер приложений — это проверить подпись JWT-токена.

  • Сервер приложений может не заниматься созданием токенов, а предоставить это внешнему серверу аутентификации.

  • JWT-токены делают возможным предоставление одновременного доступа к различным сервисам (в т.ч. серверам приложений), т.е. реализовать Single Sign-On (SSO).

Поддержка JWT-токенов в платформе

Упрощённо говоря, JWT-токен – это JSON-структура, в поля которой записана вся необходимая для аутентификации информация (кем и кому выдан токен, время жизни токена, в каких приложениях этот токен может быть использован для аутентификации и т.д.)

Разработчикам нет необходимости изучать детали структуры JWT-токена – во встроенном языке будет доступен объект ТокенДоступа , свойства которого имеют понятные имена (см. примеры ниже).

Для поддержки JWT-токенов в платформе реализовано следующее:

  • Во встроенном языке можно создавать токены доступа и заполнять их свойства нужными значениями. Перед отправкой для аутентификации токен должен быть подписан одним из 12 алгоритмов подписи токенов, поддерживаемых платформой. Для подписи токена нужно также указать ключ подписи. Ключ подписи обычно генерируется криптопровайдером; меняется он, как правило, редко, раз в несколько лет; хранить его можно, например, в константах конфигурации (как в примере ниже).

    ТокенДоступа = Новый ТокенДоступа;
    ТокенДоступа.Эмитент = "ERP";
    ТокенДоступа.Получатели.Добавить("ДО");
    ТокенДоступа.ВремяСоздания = ТекущаяУниверсальнаяДата() - Дата(1970,1,1,0,0,0);
    ТокенДоступа.ВремяЖизни = 3600;
    КлючПодписи = Константы.КлючПодписи.Получить();
    ТокенДоступа.Подписать(АлгоритмПодписиТокенаДоступа.HS256, КлючПодписи);

  • Информационным базам, HTTP и Web сервисам через параметр запроса "AccessToken" или в заголовке "Authorization" можно передавать токен доступа в формате Base64URL . Токен доступа при участии в строковых операциях автоматически конвертируется в строку в формате Base64URL.
    Например:

    Запрос = Новый HTTPЗапрос("http://example.com/hs/testService?AccessToken=" + ТокенДоступа);
    Или
    Запрос = Новый HTTPЗапрос("http://example.com/hs/testService");
    Запрос.ДобавитьТокенДоступа(ТокенДоступа);
    Или
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
    Запрос = Новый HTTPЗапрос("http://example.com/hs/testService", Заголовки);
  • Добавлен новый параметр AccessToken для запуска тонкого и веб-клиентов для опубликованных инфобаз с аутентификацией по JWT-токену.
  • В файле веб-публикации *.vrd инфобазы можно для сервисов и информационных баз указывать список доверенных эмитентов токена (например, список информационных баз, чьим пользователям разрешен доступ по токену в данную инфобазу) и ключи для проверки подписи.
  • В файле веб-публикации *.vrd настраиваются правила сопоставления пользователей токена и пользователей информационной базы. Например, если пришел токен с полем 'sub', в котором указан ИвановИИ, то можно настроить сопоставление с полем "Имя" пользователя ИБ. Также можно настроить сопоставление любого поля токена с полем "Адрес электронной почты" или "Пользователь ОС" пользователя ИБ.
  • В параметрах пользователя можно разрешить или запретить аутентификацию по токенам.

02.png

С помощью JWT-токенов, в частности, можно будет реализовать бесшовную кроссплатформенную интеграцию конфигураций 1С, опубликованных на веб-серверах. Одна конфигурация (например, ERP) может выступать в качестве сервера аутентификации. У другой конфигурации (например, Документооборот) в vrd-файл публикации записаны идентификатор конфигурации ERP как доверенного провайдера и ключ для проверки подписи. ERP сможет вызывать веб- и НТТР-сервисы Документооборота, передавая в них для аутентификации на стороне Документооборота JWT-токены.



Рассказать друзьям: