В статье приводится простой пример организации аутентификации при помощи OpenID, а также показывается как поднять веб-клиент 1С на веб-сервере IIS.
OpenID - это способ аутентификации по протоколу HTTPS при котором пользователь вводит логин-пароль не при входе в базу а на специальном сервере, откуда данные отправляются в одну или несколько баз, в которую пользователь хочет войти, при этом повторно запроса пароля не происходит.
В качестве примера развернем на локальном компьютере 3 пустые базы - OpenID-сервер и две клиентские базы, опубликуем их на веб-сервере IIS, и настроим OpenID-аутентификацию, при помощи которой пользователь сможет входить в обе клиентские базы не вводя пароль.
На компьютере установлено: 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 можно войти в веб-клиент базы, это означает что база опубилкована и работает.
Откроем базу OpenIDClient под административными правами, выполним публикацию базы на веб-сервере. Укажем:
Имя базы = OpenIDClient,
Публиковать тонкий клиент и веб-клиент = Истина,
На закладке OpenID: Использовать OpenID аутентификацию= Истина
Адрес OpenID-провайдера: https://budnikasus/OpenIDServer/e1cib/oid2op (здесь /e1cib/oid2op - жестко заданное в 1С окончание адреса провайдера, оно одинаково для всех OpenID серверов на 1С).
База будет опубликована по адресу http://BudnikAsus/OpenIDClient
После публикации базы если зайти в IIS можно войти в веб-клиент базы, это означает что база опубликована и работает. При входе в каждую базу мы видим окно аутентификации, куда нужно вводить логин-пароль. Базы опубликованы по незащищенному протоколу HTTP.
2. Создадим сертификат. Для того, чтобы работала OpenID аутентификация базы должны работать ТОЛЬКО по протоколу HTTPS, для этого необходимо получить сертификат шифрования. Для работы в интернет нужно получить сертификат, привязанный к имени вашего сайта от стороннего провайдера. Для работы в рамках одной сети или в рамках одной организации можно сделать самоподписанный сертификат. (Т.е. корневой сертификат можно сделать общий один на всех клиентов, которому все будут доверять). Так как мы рассматриваем самый простой случай, будем выпускать самоподписанный сертификат.
Сертификат делаем средствами IIS сервера.
Создаем привязки, указывающие на то, что наш веб-сервер будет работать по протоколу HTTPS через порт 443 (стандартный порт протокола HTTPS) с только что созданным сертификатом
Окно аутентификации OpenID отличается от окна аутентификации 1C:Предприятия:
Всё готово!
Теперь если мы заходим в первую базу https://budnikasus/OpenIDClient откроется окно аутентификации OpenID (оно отличается от окна аутентификации базы 1С) и после аутентификации откроется база.
При заходе во вторую базу https://budnikasus/OpenIDClient2 пароль вводить уже не надо.
Если для веб-клиента после аутентификации возникает ошибка: "Ошибка HTTP 400.0 — Bad request" -
Это происходит из-за того, что запрос аутентификации проходит по адресу
https://budnikasus:443/OpenIDServer/e1cib/oid2op?cmd=form а окно OpenID открывается по адресу
https://budnikasus/OpenIDServer/e1cib/oid2op?cmd=form
1С же требует точного совпадения адреса.
Откроем файл "C:\inetpub\wwwroot\OpenIDServer\default.vrd" и добавим свойство <returnto>:
<openid>
<provider>
<lifetime>604800</lifetime>
<returnto>.*</returnto>
<returnto>.*\.1c\.ru</returnto>
</provider>
</openid>
или, что то же самое - нужно указать "Разрешенные адреса для переадресации адреса" при публикации или вручную.
Рекомендации по поиску ошибок:
1) Проверяйте работу аутентификации через приложение 1С - тонкий клиент. Оно работает более стабильно, на веб-клиенте существуют некоторые ошибки которых нет в тонком клиенте.
2) Проверить работу OpenID сервера можно постучавшись в браузере по адресу https://SiteName.com/OpenIDServer/e1cib/oid2op. Сервер вернет в этом случае xml - файл с ответом.
3) Обязательно проверяйте, что сертификат SSL работает и базы открываются по протоколу HTTPS.
Примечания на память:
1) Открыть IIS можно, выполнив команду IIS в окне ввода команд Windows. Устанавливается IIS из окна "Программы и компоненты" - "Включение или отключение компонентов Windows"
2) Открыть консоль просмотра сертификатов можно, выполнив команду mmс, далее "файл" - "добавить или удалить оснастку" - "сертификаты".
3) Для создания сертификата SSL у стороннего провайдера нужно указывать, для какого сайта этот сертификат формируется и подтвердить ваши права на этот сайт каким-либо способом.
4) Получить бесплатный сертификат SSL при наличии доменного имени можно тут https://www.sslforfree.com/create
5) Файлы сертификата *.crt и *.key можно сконвертировать в *.pfs, воспользовавшись сервисом https://ssl4less.ru/ssl-tools/convert-certificate.html.
6) Проверить правильность установки сертификата можно через сайт https://ssl4less.com.ua/ssl-tools/check-ssl-certificate.html