Device flow аутентификация, или туда и обратно

27.10.23

Администрирование - Информационная безопасность

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)
Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример приложения с device flow аутентификацией
.dt 145,46Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

Ссылка на githab

Как это будет выглядеть для пользователя

Библиотека для работы с OIDC

Пример работы библиотеки с провайдером Yandex

 

Device flow - способ аутентификации, при котором пользователь не вводит свои данные в приложение.

Обычно, такой способ используется для приложений, где сложности с вводом данных. Например, на телевизоре, с помощью пульта ДУ, очень не удобно что-то писать. Поэтому приложение запрашивает код, который вы можете получить в мобильном приложении или на сайте. Зайти в приложение или на сайт довольно просто. Обычно код - небольшой набор цифр.

 

 

В десктопных приложениях, данный метод позволяет:

1. Защитить данные пользователя от "злоумышленников" - приложение не увидит чувствительных данных, и не сможет их украсть.

2. Снять с себя ответственность за поддержку методов авторизации - в настоящее время, есть различные методы авторизации - логин/пароль, код по смс, звонок на телефон, по сертификату, ссылка на почту и другие. Использование device flow позволяет не поддерживать все этим методы в приложении, а использовать те методы, которые поддерживает портал. 

 

Как это будет выглядеть для пользователя

  1. Пользователь совершил действие, для авторизации.
  2. Получил код пользователя.
  3. Открыл страницу подтверждения провайдера в браузере.
  4. Если пользователь не авторизован - необходимо авторизоваться в браузере.
  5. Необходимо подтвердить предоставление доступа приложению. В Яндекс, необходимо ввести код пользователя, но у других провайдеров может быть иначе.   
  6. Вернуться в приложение.

У других провайдеров, схема может быть немного другая, например - провайдер сгенерировал ссылку, пользователь переходит по ней, и не нужно вводить код пользователя в браузере.

 

Библиотека для работы с OIDC

 

Определения: 

Библиотека - обработка, хранящая методы для работы с OIDC.

Авторизатор - модуль обработки. 

Клиент авторизатора - форма обработки, клиентские методы.

Сессия - сущность, хранящая в себе данные для работы с сервисом.

OIDC - openid connect

Возможности:

1. Получить код устройства

2. Получить токен доступа, имея код устройства

3. Обновить токен доступа, используя токен обновления

3. Хранить, редактировать, удалять сессии.

Варианты работы.

Библиотека поставляется как расширения. Возможно скопировать объекты из расширения в конфигурацию.

 

Использование через клиент авторизатора.

Описание параметров Авторизатора

Тип: Структура

ИмяПриложения - Строка - предоставляет провайдер OIDC

КлючПриложения - Строка - предоставляет провайдер OIDC

Скоупы - Строка - разрешения, которые требуется для приложения

_ХостIdentity - Строка - хост OIDC

___Http - Строка - имя объекта, который реализует функции транспорта, если в приложении нет такого объекта, указать объект Авторизатора

1. Инициализация клиента авторизатора

Клиент = АвторизаторКлиент.КлиентOidc(ПараметрыАвторизатора);

АвторизаторКлиент - Общий модуль.

ПараметрыАвторизатора - Структура - см. Описание параметров Авторизатора

2. Аутентификация , асинхронное получение сессии

&НаКлиенте
Процедура Авторизоваться(Команда)

    Оповещение = Новый ОписаниеОповещения("ПослеАвторизации", ЭтотОбъект);
    Ключ = "oidc_4f36bf3d-294a-4835-8e0b-6c2158333e65";
    Клиент.НачатьПолучениеСессии(Оповещение, Ключ);

КонецПроцедуры

&НаКлиенте
Процедура ПослеАвторизации(Результат, ДопПараметры) Экспорт

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТокенДоступа = Результат.ТокенДоступа;
	ТокенОбновления = Результат.ТокенОбновления;
	
КонецПроцедуры

Оповещение - ОписаниеОповещения - Будет вызвано, после подтверждения, или отклонения в браузере. 

Ключ - Строка - Идентификатор, для сохранения или получения сессии из настроек.

Метод "НачатьПолучениеСессии" работает по следующему сценарию:

  • Поиск сохраненной сессии в хранилище настроек. 
  • Сессия есть: 
    • Если сессия живая(т.е. срок годности сессии не истек), тогда возвращаем ее.
    • Если сессия протухла, обновим ее. Сессия обновится, если есть в наличии токен обновления.
  • Сессии нет:
    • Авторизация, с переходом в браузер. 

 

   

 

3. Получение сессии из настроек, без попытки авторизации

Ключ = "oidc_4f36bf3d-294a-4835-8e0b-6c2158333e65";
Сессия = Клиент.ПолучитьСессию(Ключ);

Ключ - Строка - Идентификатор, для сохранения или получения сессии из настроек.

 

Пример работы библиотеки с провайдером Yandex

Создание приложения в Yandex

Зарегистрируйте приложение. Как это сделать?

Установите расширение библиотеки. Авторизатор имеет несколько реквизитов.

__Имя - по умолчанию, объект библиотеки называется Авторизатор, но если вы хотите добавить префикс в название обработки, то укажите новое название в комментарии реквизита __Имя. Это может понадобиться, если вдруг в приложении уже есть обработка с таким названием. 

 

 

___Http - в этом реквизите указан объект, который реализует транспортные функции. Его можно поменять, так же вписав другой объект комментарий.

 

 

__РесурсКодУстройства и __РесурсТокен - в них хранится ресурс получения кода устройства и токена соответственно. 

Изначально думал, что эти ресурсы тоже унифицированы, но у Yandex они отличаются от наших, поэтому их тоже можно кастомизировать. 

__РесурсТокен = /token

__РесурсКодУстройства = /device/code

 

 

В общем модуле АвторизаторКлиент, в функции КлиентOidc, необходимо в переменной ПространствоИмен указать название обработки Авторизатора. Если вы его не меняли, то оставить как есть. 

 

 

Далее инициализируем клиент и начинаем авторизацию, как указано в разделе Использование через клиент авторизатора.

В личном кабинете нам нужны ClientID и Client secret приложения

 

 

Укажем эти данные в параметры авторизатора, и можем переходить к авторизации.

&НаКлиенте
Функция Авторизоваться() Экспорт

    ПараметрыАвторизатора = _ПараметрыАвторизатора();
    Клиент = АвторизаторКлиент.КлиентOidc(ПараметрыАвторизатора);

    Оповещение = Новый ОписаниеОповещения("ПослеАвторизации", ЭтотОбъект);
    Клиент.НачатьПолучениеСессии(Оповещение, "КлючНастройкиПриложения");

КонецФункции

&НаКлиенте
Процедура ПослеАвторизации(Результат, ДопПараметры) Экспорт

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТокенДоступа = Результат.ТокенДоступа;
	
КонецПроцедуры

&НаКлиенте
Функция _ПараметрыАвторизатора()

    Результат = АвторизаторКлиент.ОпределенияПараметрыАвторизатора();
    Результат.ИмяПриложения = ""; // ClientID 
    Результат.КлючПриложения = ""; // Client secret
    Результат._ХостIdentity = "https://oauth.yandex.ru";
	
    Возврат Результат;
	
КонецФункции

 

Проверить работоспособность можно, отправив запрос к сервису Яндекс

&НаСервере
Процедура ПроверитьАвторизациюНаСервере()
	
    Транспорт = Обработки.HTTP.Создать();
	
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Authorization", СтрШаблон("OAuth %1", ТокенДоступа));
	
    ДопПараметры = Новый Структура;
    ДопПараметры.Вставить("Заголовки", Заголовки);
	
    Результат = Транспорт.GetJson("https://login.yandex.ru/info",, ДопПараметры);
	
    ТестАвторизации = ТипЗнч(Результат) = Тип("Соответствие")
        И Результат.Получить("id") <> Неопределено
        И Результат.Получить("login") <> Неопределено
        И Результат.Получить("default_email") <> Неопределено
        И Результат.Получить("real_name") <> Неопределено;
		
    Если Не ТестАвторизации Тогда
        ВызватьИсключение "Ошибка авторизации";
    КонецЕсли;
	
КонецПроцедуры

 

Требования:

  • Общее:
    • Платформа: 8.3.10.2772 и выше
    • Не безопасный режим
  • Авторизатор:
    • Тонкий клиент, толстый клиент
  • Клиент авторизатора:
    • Тонкий клиент

Зависимости:

КоннектроHTTP - в расширении используется библиотека для работы с HTTP. Авторизатор может работать без него, но в самых простых сценариях HTTP.

 

Таким образом, с данной библиотекой возможно получить токен доступа, у любого провайдера OIDC, но это не точно. 

См. также

Информационная безопасность Системный администратор Программист Платные (руб)

AUTO VPN (portable) - автоматизация подключения пользователей к удаленному рабочему месту или сети посредством создания автоматического VPN (L2TP или L2TP/IPSEC и т.д.) подключения без ввода настроек пользователем (с возможностью скрытия этих настроек от пользователя). Программа автоматически выполняет подключение к VPN серверу и после успешного коннекта , если необходимо, подключение к серверу удаленных рабочих столов (RDP).

1200 руб.

24.03.2020    15094    25    32    

35

Информационная безопасность Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Предлагается внешняя обработка для просмотра данных в формате ASN1. Есть 2 режима: загрузка из бинарного формата и из BASE64. Реализована функция извлечения всех сертификатов, которые можно найти в ASN1-файле. В дополнении к этому продукту предлагается методическая помощь по вопросам, связанным с технической реализацией криптографии и шифрования в 1С.

1000 руб.

29.08.2016    29915    9    1    

10

Информационная безопасность Пароли Платформа 1С v8.3 Бесплатно (free)

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    5622    kamisov    17    

60

Информационная безопасность Программист Платформа 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    6206    PROSTO-1C    10    

39

Информационная безопасность Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Продукты на основе решений 1С уверенной поступью захватывают рынок учётных систем в стране. Широкое распространение программ всегда порождает большой интерес к ним со стороны злоумышленников, а пользователь 1С это одна из дверей в защищённый информационный контур предприятия. Обработка позволяет быстро и комплексно оценить настройки безопасности конкретной базы и возможности пользователя этой базы на сервере. Также можно оценить некоторые аспекты сетевой безопасности предприятия со стороны сервера 1С.

5 стартмани

24.04.2023    6074    18    soulner    7    

32

Информационная безопасность Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    6965    43    Silenser    12    

24
Оставьте свое сообщение