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-провайдера можно задать время жизни признака аутентифицированности. Это позволяет заново запрашивать аутентификацию в тех случаях, когда подключение к информационным базам происходит с большими промежутками времени.
OpenID-аутентификация (OpenID Authentication)
Система «1С» поддерживает в т.ч. возможность аутентификации методом OpenID, при которой пользователя «узнает» не отдельно взятая ИБ, а OpenID-провайдер, у которого в списке присутствуют данные идентифицируемого лица. Такой метод удобен при условии, что пользователь работает с многочисленными и разнообразными ИБ. Преимущества данного метода идентификации в том, что при трандиционном подключении к платформе придется каждый раз вводить пару «логин-пароль», а при использовании OpenID-аутентификации достаточно единожды пройти эту процедуру, подключившись к одной из ИБ. Далее уже не потребуется пользоваться логином и паролем, силами OpenID-провайдера на основании имеющейся у него информации аутентификация будет проходить в автоматическом режиме. Схема взаимодействия представлена ниже.

В системе «1С» OpenID-провайдером выступает ИБ «1С:Предприятия», опубликованная на сервере. Далее процесс идентификации проходит по следующим этапам:
- обращение клиентского приложения к ИБ;
- ИБ обращается к OpenID-провайдеру с запросом об аутентификации;
- пользователь, введя логин-пароль, подтверждает свою личность;
- OpenID-провайдер идентифицирует его и на ПК пользователя формируются cookie`s, сохраняющие данные об аутентификации;
- с их помощью пользователь подключается к ИБ и приступает к работе.
Когда возникает необходимость поработать с другой ИБ, пользователю не придется проходить процедуру заново, поскольку с помощью куки OpenID-провайдер сам идентифицирует клиента. «Время жизни» куки можно ограничить в настройках OpenID-провайдера с тем, чтобы избежать доступа к ИБ клиентами, утратившими право на них (например, после увольнения, истечения полномочий и т.п.).
ТОП ПРОДАЖ 
Прозрачная аутентификация
Провайдер аутентификации облачного сервиса Фреш позволяет войти в приложение пользователя из стороннего сервиса без использования дополнительной аутентификации и авторизации.
Этот способ аутентификации предназначен для организации «прозрачного» входа по технологии единого входа ( Single Sign-On ) , когда пользователь уже работает в своем личном кабинете в стороннем (по отношению к сервису Фреш) сервисе.
Организация единого входа возможна 2-мя способами:
- Если сторонний сервис поддерживает технологию OAuth2 или OpenID-Connect, то на стороне сервиса Фреш нужно выполнить настройки в соответствии с данными провайдера стороннего сервиса.
- Если сторонний сервис не поддерживает технологию OAuth2 или OpenID-Connect, то на стороне этого сервиса должна быть выполнена разработка для обеспечения поддержки прозрачной аутентификации.
Настройка сервиса Фреш для «прозрачного» входа из сервисов, поддерживающих OAuth2 и OpenID-Connect описана в главе «Использование сторонних провайдеров аутентификации» документа «1С:Облачная подсистема Фреш».
Схема работы с использованием OAuth2 или OpenId-Connect
Сервис Фреш поддерживает стандарт OpenID-Connect в части Authorization Code Flow – https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowSteps
В этой схеме Фреш является клиентом (приложением) к стороннему провайдеру.
Также поддерживаются некоторые отступления от стандарта, чтобы реализовать возможность авторизации через провайдеры, которые реализуют только OAuth2 и не используют стандарт OpenID-Connect целиком. Подробнее см. раздел «Продвинутые настройки взаимодействия с провайдером аутентификации» в главе «Использование сторонних провайдеров аутентификации» документа «1С:Облачная подсистема Фреш».
Подключение приложения
Для подключения в стороннем провайдере необходимо установить идентификаторы приложения Фреш:
- client_id – идентификатор приложения Фреш;
- client_secret – защищенный ключ приложения Фреш;
- redirect_uri – адрес приложения, куда будет переадресован пользователь после авторизации, в зависимости от сайта возможны разные адреса, например для 1cfresh.com будет адрес: https://1cfresh.com/a/openid/e1cib/oid2op/sso/callback
Точки взаимодействия
В сервисе Фреш настраиваются точки взаимодействия, которые используются в процессе авторизации и регистрации. Для примера используется провайдер https://login.1c.ru/oidc
| Точка взаимодействия | Пример |
|---|---|
| Получение кода авторизации | https://login.1c.ru/oidc/authorize |
| Получение токена | https://login.1c.ru/oidc/accesstoken |
| Получение информации о пользователе | https://login.1c.ru/oidc/profile |
Получение ключа доступа
Ключ доступа необходим для работы Фреш со сторонним провайдером. Примеры далее будут использовать сервис-провайдер openid connect http://login.1c.ru/ и приложение https://1cfresh.com/
1. Авторизация пользователя. Необходимо перенаправить пользователя по адресу http://login.1c.ru/oidc/authorize, передав следующие параметры:
Идентификатор приложения Фреш
Адрес, на который будет переадресован пользователь после прохождения авторизации. Должен совпадать с redirect_uri, указанным на этапе подключения приложения Фреш
Набор разрешений, запрашиваемых приложением Фреш у провайдера, бывает не обязателен для определенных провайдеров.
Тип ответа, который необходимо получить. Фреш использует параметр code.
Любое значение, которое провайдер вернет на redirect_uri. Фреш использует JWT-токен для передачи значений возврата.
Сервис Фреш выполняет этот запрос самостоятельно при переходе по ссылке входя через SSO, например https://1cfresh.com/a/openid/e1cib/oid2op/sso/login/portal.
2. Разрешение прав доступа. Если пользователь не авторизован, ему будет показана форма входа провайдера. После успешного входа пользователю будет предложено авторизовать приложение, разрешив доступ к своим данным.
3. Получение ключа доступа access_token. После успешной авторизации приложения браузер пользователя будет перенаправлен по адресу redirect_uri. При этом код для получения ключа доступа code будет передан параметром. Для получения access_token приложение Фреш выполнит POST запрос на https://login.1c.ru/oidc/accessToken , передав следующие параметры:
Защищенный ключ приложения
Адрес, на который будет переадресован пользователь после прохождения авторизации. Должен совпадать с redirect_uri, указанным на этапе подключения приложения
Код, полученный после прохождения авторизации
Тип запрашиваемого ресурса. Значение равно «authorization_code».
В результате выполнения запроса приложение Фреш ожидает получить JSON c ключами, например:
Поле access_token в общем случае обязательно, но может быть передано и в данных при возврате на запрос разрешения прав доступа (шаг 2).
Получение данных пользователя
Приложение Фреш выполнит запрос по адресу получения данных пользователя, в примере это http://login.1c.ru/oidc/profile, передав access_token в заголовке Authrization.
В результате выполнения запроса приложение Фреш ожидает получить данные пользователя в ответе в виде JSON, например:
Обрабатываемые свойства, которые ожидает получить приложение Фреш:
| Свойство | Обязательное | Описание |
|---|---|---|
| sub | Да | Идентификатор пользователя с стороннем сервисе для сопоставления пользователя в приложении Фреш |
| Да | Адрес электронной почты пользователя. Используется в сервисе Фреш для поиска уже существующих пользователей. В рамках сервиса не может быть указано 2х одинаковых email. | |
| phone | Номер телефона | |
| first_name | Имя | |
| last_name | Фамилия | |
| middle_name | Отчество | |
| public_id | Публичный идентификатор пользователя, например ИНН. |
Имена свойств могут отличаться. Взаимодействие с провайдером в приложении Фреш настраивается для каждого провайдера индивидуально.
Схема работы без использования OAuth2 и OpenId-Connect
Схема работы, которую должен поддержать сервис, не поддерживающий OAuth2 или OpenID-Connect
Вход в приложение
Процесс входа пользователя в приложение облачного сервиса Фреш по технологии единого входа без использования OAuth2 или OpenID-Connect:
- Обслуживающая организация перенаправляет пользователя на адрес OpenID-провайдера методом POST. В теле запроса содержатся данные аутентификации, адрес приложения, одноразовый ключ (вместо пароля).
- Данные верифицируются OpenId-провайдером с помощью симметричной подписи без обращению к провайдеру.
- Устанавливает cookie одноразового входа.
- OpenID-провайдер перенаправляет пользователя на адрес приложения.
- Приложение перенаправляет пользователя на OpenID-провайдер и передает OpenID-провайдеру ранее установленную им cookie (это стандартная схема работы с OpenID-провайдером).
- OpenID-провайдер обнаруживает cookie и перенаправляет пользователя на приложение с разрешением входа.
Получение секретного ключа
Для подписи данных авторизации используется секретный ключ. Секретный ключ генерируется OpenID-провайдером облачного сервиса Фреш.
Возможны 2 варианта автоматизированного получения секретного ключа:
- Периодическая отправка ключа, инициируемая облачным сервисом Фреш
- Отправка ключа по запросу от обслуживающей организации
Для обоих вариантов на стороне обслуживающей организации разворачивается отдельный HTTP-сервис, на который облачный сервис Фреш отправляет секретный ключ. Если в ответ на POST-запрос к этому сервису получен ответ с кодом 200, то это считается подтверждением получения секретного ключа. Адрес и параметры доступа к сервису получения секретного ключа задаются администратором сервиса Фреш в настройках поставщика удостоверений сквозной аутентификации. Для доступа к серверу обслуживающей организации может использоваться пользовательский сертификат.
На адрес сервиса для передачи ключа приходит запрос с разметкой JSON c данными:
- id — идентификатор ключа подписи
- expired — срок действия ключа подписи
- key — двоичные данные ключа подписи в формате base64
Адрес OpenID провайдера сервериса
Одноразовый номер для защиты от атак повторного использования (дата в формате XML до Z + GUID)
Генерируется обслуживающей организацией при каждом запросе.
Номер области данных пользователя
Подпись данных обслуживающей организации в формате Base64. Порядок значений для вычисления подписи:
- assoc_handle
- response_nonce
- provider
- user_id
- user
- tenant
Алгоритм вычисления подписи на псевдокоде:
Например, на языке C# эти действия могут быть выполнены инструкциями:
* Для входа можно использовать идентификатор пользователя (user_id) или логин пользователя (user).
Пример страницы для перенаправления пользователя в приложение
Необходимо перенаправлять пользователя на эту HTML страницу в момент нажатия ссылки на вход в приложение.
OpenID Connect
Поддержка возможности использовать OpenID Connect для авторизации, появилась в платформе 1С:Предприятие начиная с версии 8.3.13 (только для работы веб-клиента). В версии 8.3.14 данная возможность стала доступна и при использовании тонкого клиента (в случае если база опубликована на веб-сервере).
Для сопоставления пользователя «1С:Предприятия» и пользователя провайдера аутентификации используется электронная почта пользователя. Электронная почта пользователя должна быть указана в свойстве Имя пользователя информационной базы.
Пример авторизации с использованием учетной записи Google в тонком клиенте 1С:Предприятие показан в коротком видеоролике ниже.