Вход на другом сайте без регистрации приложения
Достаточно реализовать шаги из документации. Аккаунт разработчика, создание приложения в панели, client_id, client_secret и вызов регистрации не нужны. Пользователь вводит пароль только на ArisID и подтверждает передачу профиля указанному сайту.
- Создайте случайный state из 64 hex-символов и code_verifier длиной 43–128 символов. Сохраните их в серверной сессии вашего сайта отдельно для каждой попытки входа.
- Вычислите code_challenge = BASE64URL(SHA256(code_verifier)), без символов «=».
- Откройте /connect с параметрами response_type=code, redirect_uri, state, code_challenge и code_challenge_method=S256. Параметры URL нужно кодировать.
- После возврата обязательно сравните state с сохранённым значением. При отмене приходит error=access_denied. При подтверждении — одноразовый code, действующий 120 секунд.
- Отправьте JSON POST на /connect/token с grant_type=authorization_code, redirect_uri, code и code_verifier. Адрес redirect_uri должен точно совпадать с первым запросом.
- Храните access_token на сервере и запрашивайте /api.php?action=me с заголовком Authorization: Bearer. Проверяйте права в своём приложении отдельно.
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;{
"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.