Excerpt | ||||||
---|---|---|---|---|---|---|
|
Словарь терминов
Единый Сервис Авторизации (ЕСА) - Сервис HRlink, используемый для авторизации внешних систем и пользователей, связанных с ними.
Bearer-токен - Токен типа JWT для аутентификации запросов Интегратора к ЕСА по схеме Bearer.
Интегратор - Тенант системы HRlink, которому нужна интеграция с системой HRlink.
Мастер-токен - Токен для аутентификации запросов Интегратора к HRlink для выполнения операций от имени определенного пользователя HRlink, принадлежащего тенанту Интегратора.
Регистрация Интегратора в HRlink
Регистрация производится по запросу Интегратора в службу заботы о клиентах HRlink.
Необходимые данные для регистрации:
Имя Интегратора. Например, Company.
Значение поля издателя (
issuer
) Bearer-токена. Может совпадать с именем Интегратора. Это поле используется интегратором для генерации Bearer-токена и используется при аутентификации для получения мастер-токена (см. ниже).Сертификат Интегратора - сертификат публичного ключа Интегратора стандарта X.509 в текстовом формате PEM. Ожидается использование сертификата конечного пользователя (LEAF), а не промежуточного сертификата (
INTERMEDIATE
).Контактный email.
В результате регистрации:
В ЕСА вносятся записи об Интеграторе и его сертификате.
Интегратору предоставляются данные для генерации Bearer-токена.
После регистрации Интегратор создаёт свой Bearer-токен и может использовать его в запросе к ЕСА для получения мастер-токена.
Получение сертификата открытого ключа ЕСА
Tip |
---|
Получение Сертификата Открытого Ключа ЕСА позволяет Интегратору проверить, что сформированный Мастер-токен был подписан ЕСА получение сертификата не является обязательным шагом. |
Метод
GEThttps://esa.hr-link.ru/certificate
возвращает сертификат ЕСА в формате PEM.
Expand | ||
---|---|---|
| ||
|
Тип содержимого ответа - text/html.
Мастер-токен
СозданиеПолучение мастер-токена
Tip |
---|
Используется для получения мастер-токена Интегратором |
Метод получения мастер-токена
POST https://esa.hr-link.ru/api/v1/masterTokens
Content-Type: application/json
Markdown |
---|
``` { "tenantHost": "<host>" } ``` |
Где <host>
- хост тенанта Интегратора в HRlink, для которого нужно выпустить мастер-токен. Обязательное поле.
Пример
Markdown |
---|
```
{
"tenantHost": "somecompany.hr-link.ru"
}
``` |
Заголовки
Authorization: Bearer <token> |
Где <token>
- это Bearer-токен типа JWT (https://jwt.io/), созданный Интегратором на основании данных, полученных при регистрации.
Подробнее см. Получение мастер-токена
Валидации
В HTTP-запросе есть заголовок для аутентификации запроса.
В заголовке для аутентификации запроса содержится Bearer-токен типа JWT.
JWT-токен содержит все обязательные данные (см. Получение мастер-токенадалее).
Существует интегратор с ID, равным Subject токена.
У интегратора существует сертификат открытого ключа.
JWT-токен подписан алгоритмом RSA с использованием закрытого ключа, соответствующего сертификату открытого ключа интегратора.
Токен можно использовать в данный момент времени.
Поля токена сформированы корректно согласно требованиям (см. Получение мастер-токена далее).
Ответ
Markdown |
---|
``` { "result": true, "masterToken": "<token>" } ``` |
Где <token>
- это мастер-токен типа JWT, созданный ЕСА для тенанта Интегратора.
Пояснения по формированию Bearer-токена
Длядля получения мастер-токена
Интегратор вызывает вызывает API метод создания получения мастер-токена на ЕСА и в заголовке Authorization
после ключевого слова Bearer передаёт свой Bearer-токен.:
Тип токена:
JWT
.Алгоритм подписи токена:
RS256
илиRS384
илиRS512
. Токен подписан ключом, соответствующим сертификату Интегратора, который был предоставлен Интегратором при регистрации.
Поля тела (payload) токена:
iss
- Issuer - Издатель Bearer-токена. Значение должно быть предоставлено Интегратором при регистрации.
Тип: string.
Формат: строка.
sub
- Subject - ID Интегратора в ЕСА, который был получен Интегратором после регистрации.
Тип: string.
Формат: UUID.
aud
- Audience - Хост ЕСА, равный esa.hr-link.ru.Тип: string.
Формат: строка.
exp
- Expiration Time - Момент времени, когда истекает время действия токена.
Тип: number.
Формат: Unix Time, количество секунд.
nbf
- Not Before - Момент времени, когда начинается время действия токена.Тип: number.
Формат: Unix Time, количество секунд.
iat
- Issued at - Момент времени, когда токен был выдан.
Тип: number.
Формат: Unix Time, количество секунд.
Все поля токена обязательны для заполнения.
Время жизни Bearer-токена (exp - nbf) не должно превышать 10 минут. Если требуется изменить это ограничение, обратитесь в службу заботы о клиентах HRlink.
Expand | ||
---|---|---|
| ||
|
Expand | ||
---|---|---|
| ||
|
Expand | ||
---|---|---|
| ||
|
Пояснения по полученному мастер-токену
В теле ответа на запрос получения мастер-токена будет поле masterToken
, содержащее мастер-токен (необходимый для дальнейшего использования)Будет получен ответ с полем masterToken
, содержащим мастер-токен, созданный для Интегратора.:
Тип токена:
JWT
.Алгоритм подписи токена: RS256. Токен подписан закрытым ключом, соответствующим сертификату открытого ключа ЕСА
Поля заголовка (header
) токена:
alg
- Algorithm - Алгоритм, которым подписан токен, равен RS256.
x5u
- x.509 Certificate Chain URL - URL для получения сертификата ЕСА для проверки подписи токена. Единственным доверенным значением является https://esa.hr-link.ru/certificate.
Поля тела (payload) токена:
iss
- Issuer - Хост ЕСА, равный esa.hr-link.ru.
sub
- Subject - ID Интегратора в ЕСА.
aud
- Audience - Хост тенанта Интегратора в HRlink, который был указан в теле запроса.
exp
- Expiration Time - Момент времени, когда истекает время действия токена.
nbf
- Not Before - Момент времени, когда начинается время действия токена.
iat
- Issued at - Момент времени, когда токен был выдан.
jti
- JWT ID - ID выданного токена на ЕСА.
Время жизни мастер-токена (exp - nbf) ограничено 60 минутами. Если требуется изменить это ограничение, обратитесь в службу заботы о клиентах HRlink.
Info |
---|
Подпись, полученного мастер-токена, можно проверить, используя Сертификата Открытого Ключа ЕСА, получив его по ссылке, указанной в поле получение сертификата открытого ключа ЕСА и проверка подписи мастер-токена - не является обязательным шагом. |
Expand | ||
---|---|---|
| ||
|
Expand | ||
---|---|---|
| ||
|
Expand | ||
---|---|---|
| ||
|
Использование мастер-токена
Теперь Интегратор может использовать мастер-токен для аутентификации запросов в HRlink от имени пользователей, принадлежащих тенанту Интегратора. Мастер-токен позволяет выполнять вызовы любых API методов, требующих аутентификации пользователя в HRlink.
Для этого в каждом запросе Интегратора в HRlink используются HTTP-заголовки:
Expand | ||
---|---|---|
| ||
|
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 при создании физлица.
Примеры использования
Expand | ||||
---|---|---|---|---|
| ||||
Выполним запрос Получение текущего пользователя с использованием мастер-токена, указав ID пользователя в HRlink.
В HTTP-заголовках запроса укажем:
Если использован корректный мастер-токен, выданный Интегратору с тенантом company.hr-link.ru и в HRlink существует пользователь этого тенанта с указанным внутренним ID HRlink, то в ответ будут получены данные этого пользователя:
|
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
Выполним запрос Метод создания отдела клиента с использованием мастер-токена, указав СНИЛС физлица пользователя, от имени которого будет выполнен запрос
В HTTP-заголовках запроса укажем:
Если использован корректный мастер-токен, выданный Интегратору с тенантом company.hr-link.ru и в HRlink существует пользователь этого тенанта с документом физлица типа СНИЛС с заданным номером 11896485005, и запрос проходит необходимые валидации, то будет выполнено создание отдела и получен ответ:
|
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
Выполним запрос Загрузка файлов с использованием мастер-токена, указав ID пользователя во внешней системе.
В HTTP-заголовках запроса укажем:
Если использован корректный мастер-токен, выданный Интегратору с тенантом company.hr-link.ru и в HRlink существует пользователь этого тенанта с указанным external_id = ext_753, заданным при создании физлица, и запрос проходит необходимые валидации, то файл будет загружен в HRlink и будет получен ответ:
|
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
Выполним запрос Создание группы заявлений с использованием мастер-токена, указав ID пользователя во внешней системе заданного типа. Группа заявлений будет создана от имени заданного пользователя.
В HTTP-заголовках запроса укажем:
Если использован корректный мастер-токен, выданный Интегратору с тенантом company.hr-link.ru, в HRlink у этого тенанта зарегистрирована внешняя система с типом ADFS, и существует пользователь с внешним ID со значением
|
Сквозная аутентификация
Редирект со сквозной аутентификацией
Метод принимает на вход jwt-токен аутентификации пользователя, сгенерированный интегратором. Производит аутентификацию данного запроса, и в случае успешной аутентификации, делает редирект пользователя в систему HRlink.
Метод
GEThttps://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
- Issuer - Издатель jwt-токена. Значение должно быть предоставлено Интегратором при регистрации.
Тип: string.
Формат: строка.
Обязательное: Да
sub
- Subject - ID Интегратора в ЕСА, который был получен Интегратором после регистрации.
Тип: string.
Формат: UUID.
Обязательное: Да
aud
- Audience - Хост ЕСА, равный esa.hr-link.ru.
Тип: string.
Формат: строка.
Обязательное: Да
thn
- Tenant Host Name - Хост тенанта, на который необходимо направить пользователя. Необязательный параметр, если ЕСА сам в состоянии определить в какой тенант нужно направить пользователя.
Тип: string.
Формат: строка.
Обязательное: Нет
exp
- Expiration Time - Момент времени, когда истекает время действия токена.
Тип: number.
Формат: Unix Time, количество секунд.
Обязательное: Да
nbf
- Not Before - Момент времени, когда начинается время действия токена.
Тип: number.
Формат: Unix Time, количество секунд.
Обязательное: Да
iat
- Issued at - Момент времени, когда токен был выдан.
Тип: number.
Формат: Unix Time, количество секунд.
Обязательное: Да
uid
- User Id - значение идентификатора пользователя.
Тип: string
Формат: строка или UUID
Обязательное: Да
uit
- User Id Type - тип идентификатора пользователя: должно принимать одно из следующих значений:
Тип: 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
- External System Type - тип внешней системы, для которой предоставлен идентификатор пользователя.
Тип: string.
Формат: строка.
Обязательное: нет
Учитывается, если тип ID пользователя uit - User Id Type, из-под которого выполняется запрос, указан как EXTERNAL_ID.
При задании поиск пользователя будет осуществляться по парам значений ID пользователя во внешней системе и типа системы, переданных в массиве userExternalIds при создании физлица.
Поля uid, uit и est необходимы для идентификации пользователя в системе HR-Link.
Время жизни Bearer-токена (exp - nbf) не должно превышать 10 минут. Если требуется изменить это ограничение, обратитесь в службу заботы о клиентах HR-Link.
Expand | ||
---|---|---|
| ||
|
Expand | ||
---|---|---|
| ||
|
Expand | ||
---|---|---|
| ||
|
При обращении к 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-токен по инструкции см пункт (Редирект со сквозной аутентификацией, Формирование токена для сквозной аутентификации)
Сформировать специальную ссылку для редиректа пользователя со сквозной аутентификацией (см. Формирование токена для сквозной аутентификации)
Expand | ||
---|---|---|
| ||
|
Итоговую полученную ссылку необходимо использовать в системе для перехода в приложение HRlink (вставить её для использования в iframe или webview).
После перехода по ссылке у пользователя откроется страница приложения HRlink (в зависимости от того, какое значение было установлено в параметре path, по умолчанию откроется реестр документов)
SSO — single sign-on
Часто у клиента в его информационной системе есть сервис, который является единой точкой входа сотрудников во все сервисы клиента (так называемый SSO — single sign-on). Соответственно, при использовании HRlink клиент хочет использовать уже существующий единый сервис для входа, чтобы сотрудникам, использующим HRlink, не нужно было запоминать отдельный логин и пароль для HRlink.
Чтобы это было возможно необходимо, чтобы три системы, участвующие в процессе, могли идентифицировать пользователя по одному ID. То есть система кадрового учёта, HRlink и сервис аутентификации должны обладать одним ID для идентификации пользователя.
Общий принцип работы
draw.io Diagram | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Предусловие. Система кадрового учёта и сторонний сервис аутентификации имеют один и тот же 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 пользователя во внешней системе используются методы создания и обновления физлица. В теле запроса присутствует следующий массив с данными:
Markdown |
---|
``` { ..., "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 пользователя во внешней системе.
Поиск документации
Livesearch | ||
---|---|---|
|