Перейти к основному содержимому

Аутентификация

Markdown

Это руководство описывает, как пройти аутентификацию в Human Dashboard и сгенерировать x-unico-accesskey, который вы будете использовать во всех запросах к API Human Token.

Процесс состоит из двух этапов:

  1. Аутентификация — выполните вход и получите токен доступа. Доступны два способа аутентификации:
    • Биометрический вход — захват лица через Unico SDK (доступен как для регистрации, так и для входа)
    • Вход по одноразовому коду из email (OTP) — одноразовый код, отправляемый на зарегистрированный адрес электронной почты (только для входа)
  2. Настройка организации — создайте профиль компании и сгенерируйте ключ доступа (только при первой регистрации)

Два способа настроить учётные данные​

Всё, что описано в этом руководстве, также можно выполнить через Human Dashboard на dashboard.unico.app — без вызовов API.

ВариантКогда использовать
DashboardПервоначальная настройка, ручная ротация ключей, периодическое управление
APIАвтоматическое развёртывание, конвейеры CI/CD, программное управление ключами

Через Dashboard​

  1. Перейдите на dashboard.unico.app
  2. Зарегистрируйтесь или войдите — используйте биометрический вход (захват лица) или одноразовый код из email
  3. Создайте организацию — укажите название компании, страну и разрешённые домены
  4. Сгенерируйте ключ доступа — перейдите в раздел Access Keys и нажмите Create key; сразу скопируйте ключ — он отображается только один раз
  5. Управляйте филиалами — создавайте и настраивайте филиалы в разделе Branches; каждый филиал генерирует собственный ключ доступа

Ключ доступа, полученный в Dashboard, — это тот же x-unico-accesskey, который используется во всех запросах к API — оба способа полностью взаимозаменяемы.

Базовые URL​

Все эндпоинты на этой странице обслуживаются Human Dashboard API. Запросы к API Human Token, такие как Create Process и Get Process, отправляются на хост API, указанный в разделе Среды.

СредаAPIБазовый URL
ProductionHuman Dashboard API (вход, организация, ключи доступа и филиалы)https://api.humantoken.unico.app

Способы аутентификации​

Для аутентификации и получения authToken доступны два способа:

СпособЭндпоинтКогда использовать
БиометрияPOST /api/console/v1/auth/biometric/sessionsРегистрация (новый аккаунт) или вход (существующий пользователь)
Email OTPPOST /api/console/v1/auth/email/sessionsТолько вход — аккаунт уже должен существовать

Намерение биометрического входа​

Каждый вызов POST /api/console/v1/auth/biometric/sessions должен указывать intent:

intentКогда использоватьПоле emailПоле name
LOGIN_INTENT_SIGNUPПервая регистрация — создание нового аккаунтаОбязательноОбязательно
LOGIN_INTENT_SIGNINСуществующий пользователь — аккаунт уже естьНе используетсяНе используется
(не указано)Обрабатывается как LOGIN_INTENT_SIGNINНе используетсяНе используется

Намерение определяет проверку, выполняемую при опросе сеанса (шаг 2):

  • SIGNUP — отклоняет вход, если эта биометрическая идентичность уже зарегистрирована (предотвращает дублирование аккаунтов).
  • SIGNIN — отклоняет вход, если эта биометрическая идентичность не зарегистрирована (для входа аккаунт должен существовать).

Этап 1 — Аутентификация​

Шаг 1: Запустите сеанс биометрического входа​

SIGNUP (первая регистрация)

curl -X POST https://api.humantoken.unico.app/api/console/v1/auth/biometric/sessions \
-H "Content-Type: application/json" \
-d '{
"intent": "LOGIN_INTENT_SIGNUP",
"email": "[email protected]",
"name": "Jane Doe"
}'
Уникальность email

Если аккаунт с этим email уже зарегистрирован, запрос возвращает 400 Bad Request.

Ответ:

{
"session": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345",
"link": "",
"token": ""
}
}

Для SIGNUP поля link и token в ответе пусты — ссылка на биометрический захват отправляется на указанный адрес электронной почты.

SIGNIN (существующий пользователь)

curl -X POST https://api.humantoken.unico.app/api/console/v1/auth/biometric/sessions \
-H "Content-Type: application/json" \
-d '{
"intent": "LOGIN_INTENT_SIGNIN"
}'

Ответ:

{
"session": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345",
"link": "https://humantoken.unico.io/...",
"token": "eyJhbGciOiJSUzI1NiJ9..."
}
}

Сохраните sessionId.

  • SIGNUP: ссылка на биометрический захват отправляется на email, указанный в шаге 1. Попросите пользователя проверить почту и пройти захват.
  • SIGNIN: откройте link в браузере и пройдите биометрический захват.

Шаг 2: Опрашивайте, пока сеанс не будет завершён​

curl https://api.humantoken.unico.app/api/console/v1/auth/biometric/sessions/b3f1a2c4-0000-0000-0000-abcdef012345

Опрашивайте каждые 2–3 секунды, пока status не перейдёт в конечное состояние.

statusoutcomeЗначение
pendingpendingПользователь ещё не прошёл захват — продолжайте опрос
processingpendingЗахват выполнен, результаты вычисляются — продолжайте опрос
completedmatchedВход выполнен успешно — authToken присутствует
completedno_matchБиометрия не совпала ни с одной записью
completedinconclusiveЗахват выполнен, но результат не удалось определить
expired—Срок действия ссылки истёк — начните заново с шага 1
canceled—Сеанс отменён — начните заново с шага 1

Дополнительные ошибки, зависящие от намерения, при опросе сеанса:

HTTPУсловие
400SIGNUP — биометрическая идентичность уже зарегистрирована (дублирующийся аккаунт)
400SIGNIN — биометрическая идентичность не зарегистрирована (аккаунт не существует)

Успешный ответ:

{
"result": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345",
"status": "completed",
"outcome": "matched",
"authToken": "eyJhbGciOiJSUzI1NiJ9..."
}
}

Сохраните authToken — используйте его как заголовок x-console-authorization во всех последующих запросах к Human Dashboard API.

Этап 1 (альтернатива) — Вход по одноразовому коду из email​

Используйте этот поток вместо биометрического, если у пользователя уже есть аккаунт и он предпочитает аутентифицироваться с помощью одноразового кода, отправленного на зарегистрированный email. Регистрация через email OTP не поддерживается — для первой регистрации используйте биометрический поток.

Шаг 1: Отправьте OTP​

curl -X POST https://api.humantoken.unico.app/api/console/v1/auth/email/sessions \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]"
}'
примечание

Email должен принадлежать существующему аккаунту. Если аккаунт не найден, шаг 2 (проверка OTP) вернёт 404 Not Found.

Ответ:

{
"session": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345"
}
}

Сохраните sessionId. На указанный адрес электронной почты отправляется 6-значный код.

Шаг 2: Проверьте OTP​

curl https://api.humantoken.unico.app/api/console/v1/auth/email/sessions/{sessionId}/{code}
HTTPУсловие
200Код действителен — authToken присутствует
400Неверный код (invalid otp code)
400OTP уже использован, достигнуто максимальное число попыток или срок действия истёк
404Email не зарегистрирован

Успешный ответ:

{
"result": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345",
"status": "completed",
"outcome": "matched",
"authToken": "eyJhbGciOiJSUzI1NiJ9..."
}
}

Сохраните authToken — используйте его как заголовок x-console-authorization во всех последующих запросах к Human Dashboard API.

Этап 2 — Настройка организации​

Шаг 3: Создайте организацию​

примечание

Этот вызов можно выполнить только один раз. Он создаёт ваш тенант и генерирует ваш branchId.

Принимается любая страна. Используйте трёхбуквенный код ISO 3166-1 alpha-3 (например, BRA, USA, MEX, DEU, IND). taxId необязателен для всех стран.

curl -X POST https://api.humantoken.unico.app/api/console/v1/organization \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corp",
"responsibleEmail": "[email protected]",
"websiteUrl": "https://acme.com",
"countryCode": "BRA",
"logo": "https://acme.com/logo.png",
"allowedDomains": ["https://app.acme.com"]
}'

Ответ:

{
"organization": {
"id": "e5d3f1a2-0000-0000-0000-abcdef012345",
"name": "Acme Corp",
"responsibleEmail": "[email protected]",
"websiteUrl": "https://acme.com",
"countryCode": "BRA",
"tenantId": "tenant-acme-prod",
"branchId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"taxId": "12345678000195"
}
}

Сохраните branchId — он идентифицирует ваш филиал по умолчанию и используется при управлении филиалами и ключами доступа.

Шаг 4: Создайте ключ доступа​

curl -X POST https://api.humantoken.unico.app/api/console/v1/access-keys \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"label": "production-key"
}'

Ответ:

{
"accessKey": "uip_ak.prod.a1b2c3d4.e5f6g7h8.i9j0k1l2"
}
предупреждение

accessKey возвращается только один раз, и получить его повторно невозможно. Сразу сохраните его в менеджере секретов как HUMAN_TOKEN_ACCESS_KEY.

Это значение — заголовок x-unico-accesskey, используемый во всех запросах к API Human Token.

Что у вас теперь есть​

ЗначениеГде использовать
branchIdИдентификация филиала по умолчанию; создание ключей доступа для конкретного филиала
accessKeyЗаголовок x-unico-accesskey во всех запросах к Human Token

Управление организацией​

Получение организации​

curl https://api.humantoken.unico.app/api/console/v1/organization/<organizationId> \
-H "x-console-authorization: <authToken>"

Ответ:

{
"organization": {
"id": "e5d3f1a2-0000-0000-0000-abcdef012345",
"name": "Acme Corp",
"responsibleEmail": "[email protected]",
"websiteUrl": "https://acme.com",
"countryCode": "BRA",
"tenantId": "tenant-acme-prod",
"branchId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"taxId": "12345678000195"
}
}

Обновление организации​

curl -X PUT https://api.humantoken.unico.app/api/console/v1/organization \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"id": "e5d3f1a2-0000-0000-0000-abcdef012345",
"name": "Acme Corp",
"responsibleEmail": "[email protected]",
"websiteUrl": "https://acme.com",
"countryCode": "BRA",
"taxId": "12345678000195",
"logo": "https://acme.com/logo-updated.png",
"allowedDomains": ["https://app.acme.com", "https://checkout.acme.com"]
}'

Управление ключами доступа​

Список ключей (только метаданные — секрет никогда не возвращается):

curl https://api.humantoken.unico.app/api/console/v1/access-keys \
-H "x-console-authorization: <authToken>"

Ротация ключа (старый ключ сразу становится недействительным):

curl -X POST https://api.humantoken.unico.app/api/console/v1/access-keys/rotate \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{"accessKey": "uip_ak.prod.a1b2c3d4.e5f6g7h8.i9j0k1l2"}'

Отзыв ключа (необратимо):

curl -X DELETE https://api.humantoken.unico.app/api/console/v1/access-keys \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{"accessKey": "uip_ak.prod.a1b2c3d4.e5f6g7h8.i9j0k1l2"}'

Управление филиалами​

Филиалы позволяют разделять конфигурацию организации (название, логотип, разрешённые домены) по продуктам или средам. У каждого филиала свои ключи доступа, поэтому контекст филиала определяется автоматически по ключу, использованному в запросе, — передавать branchId в CreateProcess не нужно.

Создание филиала​

curl -X POST https://api.humantoken.unico.app/api/console/v1/organization/branches \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"name": "Mobile App",
"logo": "https://acme.com/mobile-logo.png",
"allowedDomains": ["https://mobile.acme.com"]
}'

Ответ:

{
"branchId": "7ab1c2d3-0000-0000-0000-abcdef012345"
}

Сохраните branchId — используйте его при создании ключа доступа для конкретного филиала.

Обновление филиала​

curl -X PUT https://api.humantoken.unico.app/api/console/v1/organization/branches \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"branchId": "7ab1c2d3-0000-0000-0000-abcdef012345",
"name": "Mobile App v2",
"logo": "https://acme.com/mobile-logo-v2.png",
"allowedDomains": ["https://mobile.acme.com", "https://app.acme.com"]
}'

Создание ключа доступа для конкретного филиала​

Чтобы сгенерировать ключ доступа, ограниченный определённым филиалом, укажите branchId в теле запроса:

curl -X POST https://api.humantoken.unico.app/api/console/v1/access-keys \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"label": "mobile-app-key",
"branchId": "7ab1c2d3-0000-0000-0000-abcdef012345"
}'

Ответ:

{
"accessKey": "uip_ak.prod.z9y8x7w6.v5u4t3s2.r1q0p9o8"
}
предупреждение

accessKey возвращается только один раз. Сразу сохраните его. Любой запрос CreateProcess, аутентифицированный этим ключом, автоматически использует конфигурацию связанного с ним филиала.