Вхід для інших сайтів (OpenID Connect)
Ваш сайт уміє бути «постачальником входу»: людина, яка має обліковий запис у вас, може увійти під ним на іншому сайті (вашому другому проєкті, у крамниці, на форумі партнера) — без нового пароля на тому сайті. Так працюють кнопки «Увійти через …» у великих сервісів.
Розділ: Адмінка → Інтеграції → Вхід для інших сайтів. За замовчуванням він вимкнений: поки ви не ввімкнули, адреси постачальника відповідають «не знайдено», на сторінках немає ні посилань, ні кнопок.
Що відкриється, коли ви ввімкнете
- Люди з обліковим записом у вас зможуть входити на підключені сайти, натиснувши «Дозволити» на сторінці згоди (вона показує назву сайту й адресу, куди людина повернеться).
- Чужий сайт отримує не пароль, а підписане підтвердження «це ви» і (лише за згодою людини) ім’я, нік, мову, картинку та підтверджену пошту.
- Кожному чужому сайту людина відома під власним номером: два сайти не можуть зіставити одну людину за цим номером.
- Людина будь-коли відкликає дозвіл у кабінеті («Підключені сайти»); ви можете відкликати в конкретного сайту все одразу.
Перед вмиканням додайте до політики конфіденційності абзац про те, що під час входу через ваш сайт підключеним сайтам передаються ім’я, нік, мова, картинка й підтверджена пошта — лише за згодою людини.
Умови вмикання
- Адреса сайту в налаштуваннях —
https://…(на перевірочному стенді припустимоhttp://127.0.0.1). - Є ключ сайту (
app.key) — ним шифрується ключ підпису. - На хостингу працює розширення
openssl. - Потрібне право «змінювати налаштування» і пароль ще раз.
Зміна app.key або перенесення бази на сайт з іншим ключем обнуляє ключ підпису: він створиться заново, підключені сайти самі підтягнуть новий набір ключів.
Як підключити свій сайт
- У розділі натисніть «Додати клієнта», впишіть назву та точні адреси повернення (по одній у рядку):
https://shop.example/auth/callback. Підстановних знаків (*), адрес з#таhttp://немає. Тип: «із секретом» (серверний застосунок) або «відкритий» (односторінковий застосунок, секрету немає — захищає PKCE). - Скопіюйте
client_idіclient_secret— секрет показується один раз; загубили — натисніть «Новий секрет». - У налаштуваннях чужого сайту (будь-яка бібліотека OpenID Connect) вкажіть адресу постачальника — адресу вашого сайту. Решту бібліотека знайде сама за
https://ваш-сайт/.well-known/openid-configuration. - Області:
openid(обов’язкова),profile(ім’я, нік, мова, картинка),email(підтверджена пошта).
Якщо бібліотеки немає, потік такий (код авторизації + PKCE):
- Сайт створює випадковий
code_verifierі рахуєcode_challenge = BASE64URL(SHA256(code_verifier)). - Надсилає людину на
…/oauth/authorize?client_id=…&redirect_uri=…&response_type=code&scope=openid%20profile%20email&state=…&code_challenge=…&code_challenge_method=S256&nonce=…. Потрібні усі параметри;stateі PKCES256обов’язкові,plainне підтримується. - Після згоди людина повертається на
redirect_uriзcode,stateтаiss. Сайт звіряєstateтаiss. - Сервер сайту обмінює код:
POST …/oauth/token(grant_type=authorization_code,code,redirect_uri,code_verifier; секрет — заголовкомAuthorization: Basicабо полемclient_secret). Код живе 60 секунд і використовується один раз; повторне пред’явлення відкликає все, що видано за ним. - У відповіді
id_token(RS256) іaccess_token(10 хвилин).id_tokenперевіряється за ключами з/.well-known/jwks.json:iss,aud(вашclient_id),exp,nonce, підпис. Постійний номер людини на вашому сайті —sub. - Дані профілю:
GET …/oauth/userinfoіз заголовкомAuthorization: Bearer <access_token>(токен в адресі не приймається). - Відкликати токен:
POST …/oauth/revoke(token, секрет клієнта).
Оновлювальних токенів (refresh_token) у першому випуску немає: після 10 хвилин сайт надсилає людину на вхід знову (якщо дозвіл діє, людина не бачить питання).
Що заборонено навмисно
- Облікові записи з доступом до панелі та власник не входять через інші сайти, доки ви не позначили «Пускати облікові записи з доступом до панелі» в конкретного сайту; і їм потрібен свіжий вхід (до 10 хвилин) — або пароль ще раз. Якщо в такого облікового запису ввімкнена друга перевірка, пароль її не замінює: сайт отримає відповідь
login_required, людина входить заново й повторює. - Сторінки авторизації та згоди не можна вбудувати у фрейм;
prompt=noneу фреймі не працює. - Згода обов’язкова для всіх сайтів; вона діє 12 місяців; нова область — нова згода.
- Адреси
http://на бойовому сайті не працюють ніколи (прапор «розробка» діє лише на перевірочному стенді). - Заблокована чи видалена людина, зміна пароля, зміна другої перевірки, відкликання згоди, вимкнення сайту — токени перестають працювати одразу.
Якщо щось пішло не так
- «Увійти не вдасться»: клієнт невідомий чи вимкнений, адреса повернення не збіглася літера в літеру, немає
state— дивіться розділ «Вхід для інших сайтів» і налаштування чужого сайту. - Відповіді з помилкою приходять на адресу повернення в
error=…(invalid_request,invalid_scope,access_denied,login_required,consent_required,unsupported_response_type); у/oauth/token—invalid_client,invalid_grant,unsupported_grant_typeбез подробиць. - Журнал безпеки:
oauth.consent_granted,oauth.consent_denied,oauth.consent_revoked,oauth.code_replayed(повторний код — привід перевірити сайт-клієнт),oauth.confirm_failed. Журнал адмінки: створення, зміна й вимкнення клієнтів, зміна секрету та ключа, «Скасувати в усіх». Усім власникам надходить лист про кожну таку дію. - Зміна ключа підпису («Змінити ключ підпису» в розділі) безпечна: попередній ключ лишається в наборі ще дві години, поки не спливуть видані токени.
Оновлено 17.10.2026
Поки ніхто не висловився. Будьте першим.