К документации
ArisIDДля разработчиковВаш аккаунт ↗

Вход на другом сайте без регистрации приложения

Достаточно реализовать шаги из документации. Аккаунт разработчика, создание приложения в панели, client_id, client_secret и вызов регистрации не нужны. Пользователь вводит пароль только на ArisID и подтверждает передачу профиля указанному сайту.

  1. Создайте случайный state из 64 hex-символов и code_verifier длиной 43–128 символов. Сохраните их в серверной сессии вашего сайта отдельно для каждой попытки входа.
  2. Вычислите code_challenge = BASE64URL(SHA256(code_verifier)), без символов «=».
  3. Откройте /connect с параметрами response_type=code, redirect_uri, state, code_challenge и code_challenge_method=S256. Параметры URL нужно кодировать.
  4. После возврата обязательно сравните state с сохранённым значением. При отмене приходит error=access_denied. При подтверждении — одноразовый code, действующий 120 секунд.
  5. Отправьте JSON POST на /connect/token с grant_type=authorization_code, redirect_uri, code и code_verifier. Адрес redirect_uri должен точно совпадать с первым запросом.
  6. Храните access_token на сервере и запрашивайте /api.php?action=me с заголовком Authorization: Bearer. Проверяйте права в своём приложении отдельно.
PHP · переход на ArisID
session_start();
$state = bin2hex(random_bytes(32));
$verifier = bin2hex(random_bytes(32));
$_SESSION['aris_login'][$state] = ['verifier'=>$verifier, 'created'=>time()];
$params = [
  'response_type'=>'code',
  'redirect_uri'=>'https://example.com/auth/callback',
  'state'=>$state,
  'code_challenge'=>rtrim(strtr(base64_encode(hash('sha256', $verifier, true)), '+/', '-_'), '='),
  'code_challenge_method'=>'S256',
];
header('Location: https://idaris.tech/connect?' . http_build_query($params));
exit;
JSON · обмен кода на токен
{
    "grant_type": "authorization_code",
    "redirect_uri": "https://example.com/auth/callback",
    "code": "CODE_FROM_CALLBACK",
    "code_verifier": "SAVED_VERIFIER"
}

Заголовок обмена: Content-Type: application/json. Ответ содержит access_token, token_type, expires_in (2592000) и expires_at. Повторный обмен, неверный verifier, изменённый callback и просроченный код отклоняются.

Callback: точный HTTPS URL; HTTP разрешён только для localhost, 127.0.0.1 и [::1]. Фрагменты, шаблоны, данные входа в URL и query-параметры code/state/error запрещены. На экране согласия отображается домен получателя. Запрос подтверждения действует 10 минут.

Для ранее подключённых сайтов параметры client_id и endpoint /connect/register продолжают работать. Новым интеграциям они не требуются. Выданные разрешения можно отозвать в разделе «Сессии».

Ошибки обмена: 400 invalid_request / invalid_grant, 405 method_not_allowed, 413 body_too_large, 415 json_required, 429 rate_limited. Новых callback-адресов: до 20 на IP и 500 суммарно за 15 минут.

На этом сервере установлен самоподписанный TLS-сертификат. Серверу приложения необходимо доверять этому сертификату через своё хранилище CA; не отключайте проверку TLS.