Аутентификация openid в 1с что это
OpenID-аутентификация
OpenID-аутентификация — это один из видов аутентификации, поддерживаемых механизмом аутентификации 1С:Предприятия.
В этом случае аутентификацию пользователя выполняет не конкретная информационная база, к которой пытается подключиться пользователь, а внешний OpenID-провайдер, хранящий список пользователей.
Преимущество этого вида аутентификации проявляется тогда, когда пользователь работает с большим количеством разных информационных баз.
Если используется аутентификация 1С:Предприятия, то каждый раз, при подключении к информационной базе, пользователь будет должен вводить логин и пароль.
Если же используется OpenID-аутентификация, то однажды выполнив процедуру аутентификации при подключении к одной из баз, во все остальные базы пользователь будет заходить без запроса логина и пароля. OpenID-провайдер будет автоматически аутентифицировать пользователя на основе имеющейся у него информации.
Последовательность действий, выполняемых при подключении пользователя, можно рассмотреть на следующей схеме:
В качестве OpenID-провайдера используется информационная база 1С:Предприятия. Для этого она публикуется на веб-сервере с указанием специальных параметров.
1- клиентское приложение обращается к информационной базе 1,
2 — информационная база 1 обращается к OpenId-провайдеру с тем, чтобы он аутентифицировал пользователя,
3 — OpenID-провайдер выполняет процедуру аутентификации: пользователь вводит логин и пароль; в случае успешной аутентификации на компьютере пользователя в cookie сохраняется признак того, что провайдер аутентифицировал пользователя,
4 — используя признак аутентификации, сохраненный в cookie, пользователь подключается к информационной базе 1 и начинает работу,
5, 6 — при обращении к другой информационной базе, пользователю не нужно снова вводить логин и пароль; на основании признака аутентификации, сохраненного ранее в cookie, OpenID-провайдер выполняет аутентификацию незаметно для пользователя.
В настройках OpenID-провайдера можно задать время жизни признака аутентифицированности. Это позволяет заново запрашивать аутентификацию в тех случаях, когда подключение к информационным базам происходит с большими промежутками времени.
Глава 1. Аутентификация OpenID
1.1. Виды аутентификации
Аутентификация – проверка принадлежности предъявленного идентификатора (имени) конкретному пользователю системы, проверка подлинности. Система «1С:Предприятие» поддерживает несколько различных вариантов аутентификации, которые будут рассмотрены в следующих разделах.
1.1.1. Аутентификация средствами системы «1С:Предприятие»
Пользователь может быть аутентифицирован системой «1С:Предприятие» с помощью ввода его имени и пароля (в диалоге аутентификации, в виде параметров командной строки или строки соединения с информационной базой для внешнего соединения или automation-сервера). В этом случае проверка наличия пользователя и корректности ввода его пароля выполняет система «1С:Предприятие».
1.1.2. Аутентификация операционной системы
Пользователь может быть аутентифицирован неявно средствами операционной системы. Для этого пользователю должен быть поставлен в соответствие некоторый пользователь операционной системы. При старте системы, «1С:Предприятие» запрашивает у операционной системы пользователя, который аутентифицирован в системе в данный момент. Для этого в ОС Windows используется интерфейс SSPI, а в ОС Linux — GSS-API. Затем выполняется проверка, что данному пользователю операционной системы сопоставлен пользователь «1С:Предприятия». Если поиск заканчивается успешно – считается, что пользователь системы «1С:Предприятие» аутентифицирован успешно, и диалог аутентификации не отображается.
Примечание. Не поддерживается аутентификация пользователя средствами ОС в том случае, если клиентское приложение подключается к информационной базе через веб-сервер Apache, работающий под управлением ОС Windows.
Пользователь операционной системы указывается в формате: \\имя_домена\имя_пользователя.
1.1.3. Аутентификация с помощью OpenID
OpenID (http://openid.net/) – это протокол, который позволяет пользователю использовать единую учетную запись для аутентификации на множестве не связанных друг с другом ресурсов, систем и т.д. Система «1С:Предприятие» использует протокол, созданный на основе протокола OpenID версии 2.0 по модели Direct Identity.
Примечание 1. Данный способ аутентификации не применим при обращении к веб-сервисам, опубликованным из «1С:Предприятия».
Примечание 2. В роли провайдера OpenID выступает информационная база «1С:Предприятия».
Общая схема работы выглядит следующим образом:
OpenID-аутентифкация работает только в тех случаях, когда доступ к информационной базе осуществляется по протоколу http и https. Это означает, что использовать OpenID-аутентификацию могут только веб-клиент и тонкий клиент, подключенный к информационной базе через веб-сервер. При OpenID-аутентификации возможны кросс-доменные запросы при работе с помощью тонкого клиента, а также с помощью веб-браузеров Mozilla Firefox, Google Chrome, Safari и Microsoft Internet Explorer версий 8 и 9. В веб-браузере Microsoft Internet Explorer версий 6.0 и 7, после ввода имени пользователя и пароля, открывается окно сообщения с запросом подтверждения на выполнение операции. Если пользователь подтверждает выполнение операции — процесс аутентификации продолжается. В противном случае вновь предлагается ввести имя пользователя и пароль.
В качестве OpenID-провайдера выступает информационная база системы «1С:Предприятие». В качестве OpenID-идентификатора используются имена пользователей информационной базы. Такая информационная база должна быть особым образом опубликована на веб-сервере (в файле публикации default.vrd расположен особый элемент) и доступна для информационной базы, которая желает выполнять аутентификацию с помощью OpenID.
В качестве OpenID-идентификатора пользователя выступает свойство Имя пользователя информационной базы OpenID-провайдера. Пароль пользователя также задается в информационной базе OpenID-провайдера. Пароль, заданный в информационной базе, которая является клиентом OpenID-провайдера, игнорируется при выполнении аутентификации с помощью OpenID.
Подробнее о настройке веб-сервера для работы с OpenID-аутентификацией см. стр. 2.
Для того, чтобы система выполняла аутентификацию с помощью протокола OpenID необходимо, чтобы у пользователя был установлен флажок Аутентификация 1С:Предприятия и соответствующим образом была настроена публикация данной информационной базы на веб-сервере.
Аутентификация 1С
Аутентификация 1С:Предприятия
Аутентификация — это подтверждение, что пользователь действительно тот за кого себя выдает.
Средствами платформы аутентификация выполняется через проверку пароля пользователя.
Для включения аутентификации средствами платформы нужно в настройках пользователя установить флаг Аутентификация 1С:Предприятия:
Ниже можно указать пароль пользователя. Тогда для входа в программу нужно ввести логин и пароль:
Если у пользователя снят флаг Аутентификация 1С:Предприятия, то он не будет отображаться в списке выбора пользователей.
Аутентификация операционной системы
Аутентификация операционной системы работает только для Windows. Но если подключение выполняется через веб-сервер Apache, то аутентификация операционной системы не будет работать.
В настройках пользователя нужно установить флаг Аутентификация операционной системы и выбрать одного из пользователей операционной системы:
При запуске платформа запросит имя пользователя у операционной системы, затем проверит есть ли в списке пользователей 1С пользователь, у которого указана аутентификация операционной системы и указан текущий пользователь ОС. Если такой пользователь 1С есть, то программа будет запущена под ним без запроса логина и пароля. Если нет такого пользователя, то будет выведен стандартный диалог ввода логина и пароля (если установлен флаг Аутентификация 1С:Предприятия).
При этом в списке пользователей должен быть хотя бы один пользователь с административными правами, у которого настроена аутентификация 1С:Предприятия. Иначе будет выдана ошибка «После исполнения в списке не осталось бы ни одного пользователя с административными правами, допускающего аутентификацию средствами 1С:Предприятия!»:
Для одного пользователя может быть одновременно включена и аутентификация средствами операционной системы и аутентификация 1С:Предприятия.
OpenID-аутентификация
OpenID-аутентификация позволяет использовать для аутентификации в 1С внешний OpenID-провайдер. OpenID-провайдером может быть как база на платформе 1С, так и внешняя система, которая реализует работу по протоколу OpenID Authentication 2.0 и расширение этого протокола, реализованное в платформе 1С.
Преимущество данной аутентификации в том, что один провайдер может использоваться для аутентификации в нескольких базах 1С. Достаточно аутентифицироваться в одной базе, чтобы в другие входить без ввода логина и пароля.
Подключение к OpenID-провайдеру может выполняться только по HTTPS. Доступ к OpenID-клиентам должен быть настроен через HTTP или HTTPS.
Алгоритм аутентификации через OpenID выглядит следующим образом:
О том как установить веб-сервер, опубликовать на нем базу 1С и настроить HTTPS можно прочитать в этом курсе.
Сначала опубликуем на веб-сервере OpenID-провайдер. Это будет база 1С с пустой конфигурацией:
Чтобы данную базу можно было использовать как OpenID-провайдер нужно на закладке OpenID установить флаг Использовать в качестве OpenID-провайдера и указать Время жизни аутентификации в секундах. После истечения этого времени нужно будет снова ввести логин и пароль при входе в 1С.
Настройка аутентификации OpenID connect используя Keykloack при подключении к 1С
Вводные
Варианты решения
1. OpenID, https://v8.1c.ru/platforma/openid-autentifikatsiya/, в качестве сервиса аутентификации выделяется отдельная база 1С. настройка сводится к дополнению публикации базы по HTTP, описана в //infostart.ru/1c/articles/1170720/ и настройкой HTTPS для базы с ролью «провайдер OpenID». Устарел, переиспользовать для других сервисов проблематично, на замену ему пришел OpenID connect.
2. OpenID connect https://openid.net/connect/, «is a simple identity layer on top of the OAuth 2.0 protocol» (является простым уровнем идентификации поверх протокола OAuth 2.0). Настраивается на уровне HTTP публикации клиента.
Общее описание взаимодействия (в разделе фреш, но думаю подход к локальной платформе схож) https://its.1c.ru/db/fresh#content:19956766:1:issogl1_h1e1l9ae
Статья по использованию сервиса Okta в качестве сервера идентификации //infostart.ru/1c/articles/1435248/.
Все решения используют публичные сервисы, мне интересно запустить в локальном контуре. В качестве сервера идентификации использовал Keykloack https://www.keycloak.org/, потому что по нему есть базовая информация на русском языке, например обзор использования от X5, в том числе по использованию в связке с gatekeeper (тема следующей статьи). По ORY Hydra https://www.ory.sh/hydra/ только на англ. Так же следует отметить что все эти сервисы заточены под «cloud native», использование в средах VM и bare metal вызывает трудности.
Схема
Управление VM и подобие service discovery описал в статье //infostart.ru/1c/articles/1531329/
Настройка Keycloack
Keycloack написан на java, для тестов развернул через docker образ с внутренней базой H2, для разворачивания рабочей версии нужно разобраться с настройками. Как на уровне Keycloack указать имя возвращаемого хоста не разобрался поэтому проксирование не настраивал, использую типовой порт 8080. Для запуска образа использую podman https://podman.io/ «Podman – это демон-контейнерный движок для разработки, управления и запуска OCI-контейнеров в вашей системе Linux.»
В результате имею сервис доступный по адресу http://auth.malikov.lan:8080/auth/
Настройки в админ панели
Добавляю realm «onec_openid» (независимое пространство со своими юзерами, группами, ролями, ключами, страницами авторизации и клиентами.)
В realm «onec_openid» добавляю клиент (client) «onec_client» с Client Protocol = openid_connect
В realm «onec_openid» добавляю пользователя (users) «user», добавляю email «user@malikov.lan» и пароль через вкладку «credentials».
Настройка на стороне 1С
Использую пустую конфигурацию, в ней добавляю Роль «ПолныеПрава». В каждую из баз добавляю пользователя с именем «user@malikov.lan» с правами ПолныеПрава
Конфиг на локальном сервере
Вместо «providerconfig» можно использовать «discovery» и ссылку на «.well-known», но у меня не заработало.
В «clientconfig/scope» указан «id_token token» потому что используется Implicit Flow, с 8.3.20 возможно будет использовать более безопасный «Authorization Code Flow»
По умолчанию в качестве сопоставления для ИмяПользователя берется email, «authenticationClaimName»: «email», но можно взять и имя пользователя (preferred_username).
Проверка работоспособности
Тонкий клиент
Недостаток, не сохраняет внутри себя токены (каждый раз нужно вводить логин и пароль)
Google Chrome
Сразу перенаправляет на страницу аутентификации
Либо показывает окно выбора варианта
При успешной аутентификаци загружается рабочее место 1С
При ошибке выдает страницу с ней, в данном случае на сервере 1С nix нет пользовательской лицензии.
Общее
При использовании стандартной темы валится список ошибок подключения шрифтов, возможно решается параметрами установки или настройки
Проверку на подделку JWT не делал, тема отдельного блока тестов.
На данный момент возможно собрать локальную систему с центральной точкой входа по HTTP и переиспользовать её в других сервисах организации. Думаю возможно её дополнить связью OIDC c доменом.
Непонятен порядок работы 1С с refresh_token, т.к. по умолчанию в keykloack они короткоживущие.
Простой пример работы с аутентификацией OpenID на IIS
В статье приводится простой пример организации аутентификации при помощи OpenID, а также показывается как поднять веб-клиент 1С на веб-сервере IIS.
На компьютере установлено: Windows 10, IIS, 1С:Предприятие 8.3 (8.3.13.1644).
1. Развернем на локальной машине 3 пустых базы 1С: OpenIDServer, OpenIDClient, OpenIDClient2 и опубликуем их на веб-сервере.
В каждой базе создадим Роль «Полные права» и пользователя Admin с паролем 123 (желательно все без русских букв). Для пользователей в конфигураторе обязательно ставим галочку «Аутентификация OpenID»
Дадим пользователю IUSR права доступа к каталогам, где расположены созданные базы для того, чтобы веб-сервер IIS мог обращаться к базам.
Откроем базу OpenIDServer под административными правами, выполним публикацию базы на веб-сервере. Укажем:
Имя базы = OpenIDServer,
Публиковать тонкий клиент и веб-клиент = Истина,
На закладке OpenID: Использовать в качестве OpenID-провайдера = Истина
Также укажем в полях «Разрешенные адреса для переадресации адреса»:
«.*»
«.*\.1c\.ru»
Здесь указываются адреса, которые могут выступать Клиентами, и эта таблица необязательна к заполнению, но по факту если её не заполнить, то при авторизации через Веб-браузер возникает ошибка «Ошибка HTTP 400.0 — Bad request».
База будет опубликована по адресу http://BudnikAsus/OpenIDServer
После публикации базы если зайти в IIS можно войти в веб-клиент базы, это означает что база опубилкована и работает.
База будет опубликована по адресу http://BudnikAsus/OpenIDClient
После публикации базы если зайти в IIS можно войти в веб-клиент базы, это означает что база опубликована и работает. При входе в каждую базу мы видим окно аутентификации, куда нужно вводить логин-пароль. Базы опубликованы по незащищенному протоколу HTTP.
2. Создадим сертификат. Для того, чтобы работала OpenID аутентификация базы должны работать ТОЛЬКО по протоколу HTTPS, для этого необходимо получить сертификат шифрования. Для работы в интернет нужно получить сертификат, привязанный к имени вашего сайта от стороннего провайдера. Для работы в рамках одной сети или в рамках одной организации можно сделать самоподписанный сертификат. (Т.е. корневой сертификат можно сделать общий один на всех клиентов, которому все будут доверять). Так как мы рассматриваем самый простой случай, будем выпускать самоподписанный сертификат.
Сертификат делаем средствами IIS сервера.
Создаем привязки, указывающие на то, что наш веб-сервер будет работать по протоколу HTTPS через порт 443 (стандартный порт протокола HTTPS) с только что созданным сертификатом
Окно аутентификации OpenID отличается от окна аутентификации 1C:Предприятия:
Всё готово!
Теперь если мы заходим в первую базу https://budnikasus/OpenIDClient откроется окно аутентификации OpenID (оно отличается от окна аутентификации базы 1С) и после аутентификации откроется база.
При заходе во вторую базу https://budnikasus/OpenIDClient2 пароль вводить уже не надо.
Это происходит из-за того, что запрос аутентификации проходит по адресу
https://budnikasus:443/OpenIDServer/e1cib/oid2op?cmd=form а окно OpenID открывается по адресу
1С же требует точного совпадения адреса.
Откроем файл «C:\inetpub\wwwroot\OpenIDServer\default.vrd» и добавим свойство :
Рекомендации по поиску ошибок: