О чём раздел В данном разделе описывается порядок действий, необходимых для реализации сложных кейсов инетграции:
Словарь терминов
Единый Сервис Авторизации (ЕСА) - Сервис HRlink, используемый для авторизации внешних систем и пользователей, связанных с ними.
Bearer-токен - Токен типа JWT для аутентификации запросов Интегратора к ЕСА по схеме Bearer.
Интегратор - Тенант системы HRlink, которому нужна интеграция с системой HRlink.
Мастер-токен - Токен для аутентификации запросов Интегратора к HRlink для выполнения операций от имени определенного пользователя HRlink, принадлежащего тенанту Интегратора.
Регистрация Интегратора в HRlink
Регистрация производится по запросу Интегратора в службу заботы о клиентах HRlink.
Необходимые данные для регистрации:
Имя Интегратора. Например, Company.
Значение поля издателя (
issuer
) Bearer-токена. Может совпадать с именем Интегратора. Это поле используется интегратором для генерации Bearer-токена и используется при аутентификации для получения мастер-токена (см. ниже).Сертификат Интегратора - сертификат публичного ключа Интегратора стандарта X.509 в текстовом формате PEM. Ожидается использование сертификата конечного пользователя (LEAF), а не промежуточного сертификата (
INTERMEDIATE
).Контактный email.
В результате регистрации:
В ЕСА вносятся записи об Интеграторе и его сертификате.
Интегратору предоставляются данные для генерации Bearer-токена.
После регистрации Интегратор создаёт свой Bearer-токен и может использовать его в запросе к ЕСА для получения мастер-токена.
Получение сертификата открытого ключа ЕСА
Получение Сертификата Открытого Ключа ЕСА позволяет Интегратору проверить, что сформированный Мастер-токен был подписан ЕСА
получение сертификата не является обязательным шагом.
Метод
GET https://esa.hr-link.ru/certificate
возвращает сертификат ЕСА в формате PEM.
Тип содержимого ответа - text/html.
Мастер-токен
Получение мастер-токена
Используется для получения мастер-токена Интегратором
Метод получения мастер-токена
POST https://esa.hr-link.ru/api/v1/masterTokens
Content-Type: application/json
{
"tenantHost": "<host>"
}
Где <host>
- хост тенанта Интегратора в HRlink, для которого нужно выпустить мастер-токен. Обязательное поле.
Пример
{
"tenantHost": "somecompany.hr-link.ru"
}
Заголовки
Authorization: Bearer <token> |
Где <token>
- это Bearer-токен типа JWT (https://jwt.io/), созданный Интегратором на основании данных, полученных при регистрации.
Валидации
В HTTP-запросе есть заголовок для аутентификации запроса.
В заголовке для аутентификации запроса содержится Bearer-токен типа JWT.
JWT-токен содержит все обязательные данные (см. далее)
Существует интегратор с ID, равным Subject токена.
У интегратора существует сертификат открытого ключа.
JWT-токен подписан алгоритмом RSA с использованием закрытого ключа, соответствующего сертификату открытого ключа интегратора.
Токен можно использовать в данный момент времени.
Поля токена сформированы корректно согласно требованиям (см. далее).
Ответ
{
"result": true,
"masterToken": "<token>"
}
Где <token>
- это мастер-токен типа JWT, созданный ЕСА для тенанта Интегратора.
Пояснения по формированию Bearer-токена для получения мастер-токена
Интегратор вызывает API метод получения мастер-токена на ЕСА и в заголовке Authorization
после ключевого слова Bearer передаёт свой Bearer-токен:
Тип токена:
JWT
.Алгоритм подписи токена:
RS256
илиRS384
илиRS512
. Токен подписан ключом, соответствующим сертификату Интегратора, который был предоставлен Интегратором при регистрации.
Поля тела (payload) токена:
iss
Тип: string.
Формат: строка.
sub
Тип: string.
Формат: UUID.
aud
- Audience - Хост ЕСА, равный esa.hr-link.ru.Тип: string.
Формат: строка.
exp
Тип: number.
Формат: Unix Time, количество секунд.
nbf
- Not Before - Момент времени, когда начинается время действия токена.Тип: number.
Формат: Unix Time, количество секунд.
iat
Тип: number.
Формат: Unix Time, количество секунд.
Все поля токена обязательны для заполнения.
Время жизни Bearer-токена (exp - nbf) не должно превышать 10 минут. Если требуется изменить это ограничение, обратитесь в службу заботы о клиентах HRlink.
Пояснения по полученному мастер-токену
В теле ответа на запрос получения мастер-токена будет поле masterToken
, содержащее мастер-токен (необходимый для дальнейшего использования), созданный для Интегратора:
Тип токена:
JWT
.Алгоритм подписи токена: RS256. Токен подписан закрытым ключом, соответствующим сертификату открытого ключа ЕСА
Поля заголовка (header
) токена:
alg
x5u
Поля тела (payload) токена:
iss
sub
aud
exp
nbf
iat
jti
Время жизни мастер-токена (exp - nbf) ограничено 60 минутами. Если требуется изменить это ограничение, обратитесь в службу заботы о клиентах HRlink.
Подпись, полученного мастер-токена, можно проверить, используя Сертификата Открытого Ключа ЕСА, получив его по ссылке, указанной в поле x5u
получение сертификата открытого ключа ЕСА и проверка подписи мастер-токена - не является обязательным шагом.
Использование мастер-токена
Теперь Интегратор может использовать мастер-токен для аутентификации запросов в HRlink от имени пользователей, принадлежащих тенанту Интегратора. Мастер-токен позволяет выполнять вызовы любых API методов, требующих аутентификации пользователя в HRlink.
Для этого в каждом запросе Интегратора в HRlink используются HTTP-заголовки:
Master-Api-Token
- мастер-токен, полученный Интегратором:
- Обязательный для указания.
- Формат: JWT-токен.
Impersonated-User-Id
- ID пользователя, из-под которого выполняется запрос:
- Обязательный для указания.
- Формат: строка или UUID.
- Может быть одного из типов:
- Внутренний ID пользователя в HRlink. Формат: UUID.
- ID пользователя HRlink во внешней системе. Формат: строка.
- СНИЛС физлица пользователя. Формат: строка из 11 цифр подряд, без других символов.
Impersonated-User-Id-Type - Тип ID пользователя, из-под которого выполняется запрос:
- Необязательный для указания.
- Формат: строка.
- Возможные значения:
HR_LINK_ID
SNILS
EXTERNAL_ID
- Если
Impersonated-User-Id-External-System-Type
не задан или пустой, то выполняется поиск по ID пользователя клиента во внешней системе, указанному при создании физлица в поле externalId (см. Метод создания физлица). - Если
Impersonated-User-Id-External-System-Type
задан, то выполняется поиск по ID пользователя во внешней системе с заданным типом, указанных при создании физлица в массиве userExternalIds в одном из объектов в полях systemType и value соответственно (см. Метод создания физлица). - Если тип не задан, то значение по умолчанию считается
HR_LINK_ID
.
Impersonated-User-Id-External-System-Type
- Тип внешней системы, для которой указан ID пользователя, из-под которого выполняется запрос:
- Необязательный для указания.
- Формат: строка.
- Учитывается, если тип ID пользователя Impersonated-User-Id-Type, из-под которого выполняется запрос, указан как
EXTERNAL_ID
. - При задании поиск пользователя будет осуществляться по парам значений ID пользователя во внешней системе и типа системы, переданных в массиве userExternalIds при создании физлица.
Примеры использования
Сквозная аутентификация
Редирект со сквозной аутентификацией
Метод принимает на вход jwt-токен аутентификации пользователя, сгенерированный интегратором. Производит аутентификацию данного запроса, и в случае успешной аутентификации, делает редирект пользователя в систему HRlink.
Метод
GET https://esa.hr-link.ru/redirect?code={{jwt-token}}&path={{url-encoded-path-value}}&type=PASS_THROUGH_AUTH
Параметры запроса:
code - в данном параметре должен быть передан сформированный по правилам описанным в пункте 2 jwt-токен
path - в данном параметре должны быть передан путь в системе HRlink, куда должен попасть пользователь.
Например, это может быть страница реестра документов, реестра заявлений, страница какого-то конкретного документа, страница какого-то конкретного заявления и т.д.
Значение должно быть в кодировке URL encoding, чтобы символы пути можно было безопасно использовать в качестве значения query-параметра. В значение пути не должен входить хост!
Пример значения для перехода на страницу документа сотрудника (не в URL encoding):
/employee/documents/1df91be9-cbda-459a-948b-e2b8884e5347
type - имеет константное значение PASS_THROUGH_AUTH. Данный тип редиректа указывает на то, что выполняется сквозная аутентификация пользователя, которая позволяет пользователю переходить из внешних систем без необходимости вводить логин/пароль для работы в HRlink.
Формирование токена для сквозной аутентификации
Для использования метода сквозной аутентификации интегратору необходимо сформировать специальный jwt-токен который будет передан в параметре code
Тип токена: JWT.
Поля заголовка (header) токена:
alg
- Алгоритм подписи токена: RS256 или RS384 или RS512. Токен подписан ключом, соответствующим сертификату Интегратора, который был предоставлен Интегратором при регистрации.
Поля тела (payload) токена:
iss
Тип: string.
Формат: строка.
Обязательное: Да
sub
Тип: string.
Формат: UUID.
Обязательное: Да
aud
Тип: string.
Формат: строка.
Обязательное: Да
thn
Тип: string.
Формат: строка.
Обязательное: Нет
exp
Тип: number.
Формат: Unix Time, количество секунд.
Обязательное: Да
nbf
Тип: number.
Формат: Unix Time, количество секунд.
Обязательное: Да
iat
Тип: number.
Формат: Unix Time, количество секунд.
Обязательное: Да
uid
Тип: string
Формат: строка или UUID
Обязательное: Да
uit
Тип: string.
Формат: строка.
Обязательное: Да
Возможные значения:
HR_LINK_ID - значение в uid - User Id воспринимается как ID пользователя внутри HR-Link.
SNILS - значение в uid - User Id воспринимается как СНИЛС физлица пользователя.
EXTERNAL_ID - значение в uid - User Id воспринимается как значение ID пользователя во внешней системе. Поиск пользователя по ID из внешней системы может происходить по-разному, в зависимости от наличия и значения поля est - External System Type.
Если est - External System Type не задан или пустой, то выполняется поиск по ID пользователя клиента во внешней системе, указанному при создании физлица в поле externalId (см. Метод создания физлица).
Если est - External System Type задан, то выполняется поиск по ID пользователя во внешней системе с заданным типом, указанных при создании физлица в массиве userExternalIds в одном из объектов в полях systemType и value соответственно (см. Метод создания физлица).
Если тип не задан, то значение по умолчанию считается HR_LINK_ID.
est
Тип: string.
Формат: строка.
Обязательное: нет
Учитывается, если тип ID пользователя uit - User Id Type, из-под которого выполняется запрос, указан как EXTERNAL_ID.
При задании поиск пользователя будет осуществляться по парам значений ID пользователя во внешней системе и типа системы, переданных в массиве userExternalIds при создании физлица.
Поля uid, uit и est необходимы для идентификации пользователя в системе HR-Link.
Время жизни Bearer-токена (exp - nbf) не должно превышать 10 минут. Если требуется изменить это ограничение, обратитесь в службу заботы о клиентах HR-Link.
При обращении к API будут произведены проверки аутентификации и валидации. Если какая-либо из проверок не была пройдена, будет возвращена формализованная ошибка.
Аутентификации метода:
Параметр code задан (51.215)
Параметр code является JWT-токеном (51.202)
Алгоритм подписи токена поддерживается системой (51.214)
Заданы обязательные поля токена (51.206)
Интегратор был зарегистрирован и для него существуют все необходимые настройки (51.250, 51.251)
Токен должен был подписан сертификатом, привязанным к интегратору (51.207)
Валидации метода:
Параметр path задан 51.215
Параметр type задан и является PASS_THROUGH_AUTH (51.154)
Поле uit задано (51.206)
Поле uit имеет одно из допустимых значений HR_LINK_ID, EXTERNAL_ID, SNILS (51.211)
Поле uid соответствует формату UUID или строке (51.206)
Поля uid, uit и est (если указано) заданы корректно, в соответствии с возможными принимаемыми значениями (см описание возможных значениий ссылка)
Если указано значение thn, тенант с таким хостом существует (51.300)
Интегратор имеет право работать с заданным тенантом (51.253)
Результаты работы метода:
При успешном прохождении проверок аутентификации и валидаций, пользователь будет аутентифицирован в системе HR-Link и направлен на страницу, путь которой был указан в параметре path.
Сквозная аутентификация позволяет встраивать приложение HRlink в сторонние приложения клиентов, для того чтобы они могли “бесшовно” (без дополнительной авторизации в HRlink) использовать и открывать его в своих системах.
К примеру, с помощью сквозной аутентификации клиенты смогут открывать приложение HRlink уже будучи авторизованными в мобильном приложении в webview компоненте, либо в браузере через компонент iframe.
Использование сквозной аутентификации
Для использования сквозной аутентификации необходимо:
Пройти первоначальные шаги регистрации в качестве интегратора (см. Регистрация Интегратора в HRlink)
Сформировать jwt-токен по инструкции см пункт (Редирект со сквозной аутентификацией, Формирование токена для сквозной аутентификации)
Сформировать специальную ссылку для редиректа пользователя со сквозной аутентификацией (см. Формирование токена для сквозной аутентификации)
Итоговую полученную ссылку необходимо использовать в системе для перехода в приложение HRlink (вставить её для использования в iframe или webview).
После перехода по ссылке у пользователя откроется страница приложения HRlink (в зависимости от того, какое значение было установлено в параметре path, по умолчанию откроется реестр документов)
SSO — single sign-on
Часто у клиента в его информационной системе есть сервис, который является единой точкой входа сотрудников во все сервисы клиента (так называемый SSO — single sign-on). Соответственно, при использовании HRlink клиент хочет использовать уже существующий единый сервис для входа, чтобы сотрудникам, использующим HRlink, не нужно было запоминать отдельный логин и пароль для HRlink.
Чтобы это было возможно необходимо, чтобы три системы, участвующие в процессе, могли идентифицировать пользователя по одному ID. То есть система кадрового учёта, HRlink и сервис аутентификации должны обладать одним ID для идентификации пользователя.
Общий принцип работы
Предусловие. Система кадрового учёта и сторонний сервис аутентификации имеют один и тот же ID пользователя. Этот ID может быть любым уникальным значением, по которому можно идентифицировать пользователя в информационной системе клиента. Например, это может быть логин пользователя в Active Directory, ID физлица в 1C.ЗУП, внутренний корпоративный ID и т.д. Такой ID договоримся называть ID пользователя во внешней системе. Такое состояние двух систем, когда обе системы имеют один и тот же ID пользователя, должно быть достигнуто любым способом доступным клиенту (поток 1 на схеме). HRlink в этом процессе не участвует.
HRlink с помощью методов создания и обновления физлица получает из системы кадрового учёта ID пользователя во внешней системе (поток 2 на схеме).
Пользователь выполняет вход в HRlink через сторонний сервис аутентификации (поток 3 на схеме).
В процессе успешного входа сервис аутентификации сообщает HRlink’у ID пользователя во внешней системе. По полученному ID HRlink может идентифицировать пользователя, совершившего вход, сопоставив его с ID, полученным от системы кадрового учёта (поток 4 на схеме).
Для лучшего понимания рассмотрим пример. Допустим, что всем сотрудникам клиента присваивается некий ID в информационной системе клиента, но происходит это только после того, как сотрудник будет трудоустроен. В таком случае получается ситуация, что при подписании первых кадровых документов при трудоустройстве сотрудник ещё не имеет ID во внешней системе, но уже должен подписать документы в HRlink. Получается следующий процесс:
Новый сотрудник заводится в системе кадрового учёта.
Данные сотрудника передаются из системы кадрового учёта в HRlink без информации об ID пользователя во внешней системе, т.к. его ещё нет.
Для подписания первых кадровых документов сотрудник входит в HRlink через систему аутентификации HRlink.
После трудоустройства сотрудник получает ID в информационной системе клиента.
Этот ID любым доступным для клиента способом попадает и в систему кадрового учёта, и в сервис аутентификации.
Данные сотрудника вновь передаются из системы кадрового учёта в HRlink, но уже с информацией об ID пользователя во внешней системе.
После этого все последующие кадровые документы сотрудник сможет подписывать в HRlink, выполняя вход через сторонний сервис аутентификации.
Передача ID пользователя во внешней системе в HRlink из системы кадрового учёта
Для передачи ID пользователя во внешней системе используются методы создания и обновления физлица. В теле запроса присутствует следующий массив с данными:
{ ..., "userExternalIds": [ { "systemType": "1C_HRM", "value": "12245" } ], ... }
В данном массиве можно передавать множество ID пользователя во внешних системах. В поле systemType
указывается тип внешней системы, в поле value
указывается значение ID во внешней системе.
Для указания типа внешней системы (поле systemType
) в HRlink предусмотрен справочник типов внешних систем, который может настраиваться индивидуально под клиента. Для добавления элементов в этот справочник нужно обратиться к администраторам HRlink. Предустановленными значениями в этом справочнике являются система кадрового учёта 1С.ЗУП с соответствующим значением 1C_HRM
и страховой номер индивидуального лицевого cчёта (СНИЛС) с соответствующим значением SNILS
.
Существуют следующие ограничения HRlink на значения ID пользователя во внешних системах:
Пользователь HRlink может иметь только один ID в определённом типе внешней системы. Т.е. нельзя установить два и более внешних ID для одного пользователя HRlink в одной системе.
Значения внешних ID в рамках одной системы должны быть уникальны для всех пользователей HRlink. Т.е. не может быть двух и более одинаковых значений внешнего ID для одной и той же системы, но для разных пользователей HRlink.
Вход в HRlink через сервис аутентификации, работающий по протоколу OpenID Connect
На текущий момент HRlink поддерживает сторонние системы аутентификации, работающие по протоколу OpenID Connect. В процессе входа пользователя через сторонний сервис аутентификации используется Authorization code flow. Сервис аутентификации должен возвращать ID пользователя во внешней системе или в данных access_token
, или в данных id_token
.
Внесение настроек стороннего сервиса аутентификации выполняется администраторами HRlink по запросу клиента. Для корректной настройки сервиса аутентификации необходимо предоставить администраторам HRlink следующие данные:
Название сервиса, которое будет отображаться пользователю на странице входа в HRlink.
Пара ключей clientId и clientSecret. Для получения этих ключей администраторы HRlink в свою очередь предоставят необходимые данные для настройки сервиса аутентификации клиента.
Хост, на котором расположен сторонний сервис аутентификации.
Endpoint для перенаправления пользователя в сторонний сервис аутентификации для выполнения входа.
Endpoint для получения токенов.
Информацию о том в каком токене (access_token
или id_token
) и в каком поле токена сторонняя система аутентификации возвращает ID пользователя во внешней системе.
Поиск документации