Авторизация через IZEK
Серверный сценарий для входа на сторонний сайт. Пользователь видит запрошенные права и сам решает, разрешить доступ или отказаться.
Создайте приложение
Откройте API-приложения, укажите название и точный адрес возврата. Для обычного сайта нужен HTTPS; HTTP разрешён только для localhost, 127.0.0.1 и ::1.
Обменяйте code на токен
https://izek.ru/api/oauth/tokengrant_typeобязательныйauthorization_code или refresh_token.
codeобязательныйОдноразовый код из callback.
client_idобязательныйID вашего приложения.
client_secretобязательныйСекрет приложения, только сервер-сервер.
redirect_uriобязательныйТот же адрес, что был в первом запросе.
curl -X POST 'https://izek.ru/api/oauth/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=CODE_FROM_CALLBACK' \
--data-urlencode 'client_id=CLIENT_ID' \
--data-urlencode 'client_secret=CLIENT_SECRET' \
--data-urlencode 'redirect_uri=https://example.ru/auth/izek'Поля ответа
access_tokenBearer-токен для API-запросов.token_typeВсегда Bearer.expires_inСрок жизни в секундах, обычно 3600.scopeФактически выданные права.refresh_tokenRefresh-токен для получения новой пары токенов через grant_type=refresh_token. При успешном обновлении старый refresh-токен отзывается и заменяется новым.Получите профиль
https://izek.ru/api/userinfocurl 'https://izek.ru/api/userinfo' \
-H 'Authorization: Bearer ACCESS_TOKEN'Параметры ответа
subСтроковый идентификатор пользователя.idЧисловой идентификатор; нужен scope profile.usernameЛогин пользователя.nameОтображаемое имя.avatar, avatar_urlАбсолютная ссылка на актуальный аватар.avatar_small, avatar_medium, avatar_largeСовместимые ссылки для разных размеров.avatar_originalОригинал пользовательского изображения, если он загружен.avatar_has_customtrue, если пользователь установил свой аватар.profile_urlАдрес профиля в IZEK.emailВозвращается только со scope email.{
"sub": "42",
"id": 42,
"username": "alex",
"name": "Алексей",
"avatar_url": "https://izek.ru/avatar?id=42&v=…",
"avatar_has_custom": true,
"profile_url": "https://izek.ru/",
"email": "alex@example.ru"
}Обновление access token
Когда access token истёк, отправьте тот же POST /api/oauth/token с grant_type=refresh_token, refresh_token, client_id и client_secret. Успешный ответ содержит новую пару токенов; предыдущий refresh token отзывается.
Ошибки и ограничения
invalid_clientНе найден Client ID или не совпал Secret.invalid_grantCode истёк, уже использован или выпущен для другого callback.invalid_tokenBearer-токен отсутствует, истёк или отозван.unsupported_grant_typeПоддерживаются authorization_code и refresh_token. Refresh token ротируется при успешном обновлении.rate_limitedСлишком много запросов. Повторите позже.Перед обменом кода сравните полученный state с сохранённым значением. Не записывайте токены и Secret в URL или клиентские логи.
Компонент для InstantCMS
Добавляет вход через IZEK ID, связывает пользователя по email и синхронизирует аватар. Поддерживаются InstantCMS 2.18.1+ и PHP 8.1+.
- Установите ZIP через панель InstantCMS.
- Создайте в IZEK API-приложение и скопируйте callback компонента в поле
redirect_uri. - Укажите Client ID, Client Secret и базовый адрес
https://izek.ru. - Оставьте scopes
profile email.