Вход на другом сайте · ArisID Connect
Автоматическое подключение
Приложение можно подключить без кабинета разработчика, готового client_id и обращения к администратору. Ваш сервер один раз вызывает POST /connect/register с JSON и сохраняет полученный client_id. Этот метод регистрирует приложение, но сам по себе не авторизует пользователя.
{"client_name":"Мой сайт","redirect_uri":"https://example.com/auth/callback","registration_key":"YOUR_RANDOM_64_HEX_KEY"}registration_key создайте в своём приложении: bin2hex(random_bytes(32)). Сохраните ключ на сервере вместе с настройками установки. Его не нужно получать в ArisID или вводить вручную. Не передавайте его браузеру. Повтор того же ключа и точного адреса возвращает тот же client_id. При смене адреса создаётся отдельная регистрация.
Ответ 201 при создании и 200 при повторе: client_id, client_name, redirect_uri, token_endpoint_auth_method: none, code_challenge_method: S256. Сохраните client_id и redirect_uri в своей базе. Адрес неизменяемый, один на регистрацию. Название не подтверждает владельца домена: при входе пользователь видит фактический адрес возврата.
Разрешены точные HTTPS-адреса; для localhost, 127.0.0.1 и [::1] допускается HTTP. Нельзя использовать wildcard, фрагменты, данные входа в URL и параметры code/state/error. ArisID не обращается к адресу возврата на своём сервере.
Ошибки: 400 invalid_json / invalid_request / invalid_redirect_uri, 403 client_disabled, 405 method_not_allowed, 413 body_too_large, 415 json_required, 429 rate_limited. Лимиты за 15 минут: 120 запросов и 20 новых регистраций на IP; общий предел — 500 новых регистраций. Повтор сохранённой регистрации не расходует лимит новых приложений. При 429 учитывайте Retry-After: 900. Не генерируйте новый ключ при каждом входе.
Вход пользователя
Пользователь вводит пароль только на ArisID и подтверждает переход в зарегистрированное приложение. Приложение получает одноразовый код, обменивает его на Bearer-токен на своём сервере и запрашивает профиль через API.
- Получите client_id автоматически, как описано выше. Для ручного управления приложением можно войти в ArisID и открыть Мои приложения. Укажите название и точные адреса возврата, нажмите «Создать приложение» и скопируйте client_id. Подтверждение администратора не требуется. До 20 приложений на аккаунт и до 10 адресов на приложение; HTTPS, а для localhost, 127.0.0.1 и [::1] допустим HTTP. Адреса сравниваются точно, включая порт, путь и параметры. Фрагменты, шаблоны и параметры code/state/error запрещены. client_id публичный; client_secret не нужен, используется PKCE S256. В настройках можно менять адреса и отключать приложение. Отключение отзывает все выданные ему сессии.
- Создайте state из 64 шестнадцатеричных символов и случайный code_verifier длиной 43–128 символов. Сохраните их в серверной сессии. Рассчитайте code_challenge = BASE64URL(SHA256(code_verifier)) без знаков равенства.
- Перенаправьте браузер на
/connect?response_type=code&client_id=…&redirect_uri=…&state=…&code_challenge=…&code_challenge_method=S256. - Проверьте state после возврата. При отмене возвращается error=access_denied. При подтверждении приходит code, действующий 120 секунд и только один раз.
- На сервере отправьте JSON POST на
/connect/token: grant_type=authorization_code, client_id, redirect_uri, code и code_verifier. redirect_uri должен точно совпадать с адресом из первого запроса. - Сохраните access_token только на сервере. Запрашивайте профиль через
/api.php?action=me; проверяйте права в вашем приложении отдельно.
Запрос подтверждения действует 10 минут. Ошибки обмена: 400 invalid_request / invalid_grant, 405 method_not_allowed, 415 json_required, 429 rate_limited. Ответ успешного обмена содержит access_token, token_type, expires_in и expires_at. Токен действует до 30 дней и отзывается через обычный метод logout.