N1 Nex1on

Вхід для інших сайтів (OpenID Connect)

Ваш сайт уміє бути «постачальником входу»: людина, яка має обліковий запис у вас, може увійти під ним на іншому сайті (вашому другому проєкті, у крамниці, на форумі партнера) — без нового пароля на тому сайті. Так працюють кнопки «Увійти через …» у великих сервісів.

Розділ: Адмінка → Інтеграції → Вхід для інших сайтів. За замовчуванням він вимкнений: поки ви не ввімкнули, адреси постачальника відповідають «не знайдено», на сторінках немає ні посилань, ні кнопок.

Що відкриється, коли ви ввімкнете

  • Люди з обліковим записом у вас зможуть входити на підключені сайти, натиснувши «Дозволити» на сторінці згоди (вона показує назву сайту й адресу, куди людина повернеться).
  • Чужий сайт отримує не пароль, а підписане підтвердження «це ви» і (лише за згодою людини) ім’я, нік, мову, картинку та підтверджену пошту.
  • Кожному чужому сайту людина відома під власним номером: два сайти не можуть зіставити одну людину за цим номером.
  • Людина будь-коли відкликає дозвіл у кабінеті («Підключені сайти»); ви можете відкликати в конкретного сайту все одразу.

Перед вмиканням додайте до політики конфіденційності абзац про те, що під час входу через ваш сайт підключеним сайтам передаються ім’я, нік, мова, картинка й підтверджена пошта — лише за згодою людини.

Умови вмикання

  • Адреса сайту в налаштуваннях — https://… (на перевірочному стенді припустимо http://127.0.0.1).
  • Є ключ сайту (app.key) — ним шифрується ключ підпису.
  • На хостингу працює розширення openssl.
  • Потрібне право «змінювати налаштування» і пароль ще раз.

Зміна app.key або перенесення бази на сайт з іншим ключем обнуляє ключ підпису: він створиться заново, підключені сайти самі підтягнуть новий набір ключів.

Як підключити свій сайт

  1. У розділі натисніть «Додати клієнта», впишіть назву та точні адреси повернення (по одній у рядку): https://shop.example/auth/callback. Підстановних знаків (*), адрес з # та http:// немає. Тип: «із секретом» (серверний застосунок) або «відкритий» (односторінковий застосунок, секрету немає — захищає PKCE).
  2. Скопіюйте client_id і client_secret — секрет показується один раз; загубили — натисніть «Новий секрет».
  3. У налаштуваннях чужого сайту (будь-яка бібліотека OpenID Connect) вкажіть адресу постачальника — адресу вашого сайту. Решту бібліотека знайде сама за https://ваш-сайт/.well-known/openid-configuration.
  4. Області: openid (обов’язкова), profile (ім’я, нік, мова, картинка), email (підтверджена пошта).

Якщо бібліотеки немає, потік такий (код авторизації + PKCE):

  1. Сайт створює випадковий code_verifier і рахує code_challenge = BASE64URL(SHA256(code_verifier)).
  2. Надсилає людину на …/oauth/authorize?client_id=…&redirect_uri=…&response_type=code&scope=openid%20profile%20email&state=…&code_challenge=…&code_challenge_method=S256&nonce=…. Потрібні усі параметри; state і PKCE S256 обов’язкові, plain не підтримується.
  3. Після згоди людина повертається на redirect_uri з code, state та iss. Сайт звіряє state та iss.
  4. Сервер сайту обмінює код: POST …/oauth/token (grant_type=authorization_code, code, redirect_uri, code_verifier; секрет — заголовком Authorization: Basic або полем client_secret). Код живе 60 секунд і використовується один раз; повторне пред’явлення відкликає все, що видано за ним.
  5. У відповіді id_token (RS256) і access_token (10 хвилин). id_token перевіряється за ключами з /.well-known/jwks.json: iss, aud (ваш client_id), exp, nonce, підпис. Постійний номер людини на вашому сайті — sub.
  6. Дані профілю: GET …/oauth/userinfo із заголовком Authorization: Bearer <access_token> (токен в адресі не приймається).
  7. Відкликати токен: 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

На цій сторінці
Поділитися: Telegram WhatsApp
Відкладати можна і без входу: закладки збережуться в цьому браузері, а після входу їх можна перенести до облікового запису. Вхід
Обговорення

Коментарі

Обговорення ще не почалося

Поки ніхто не висловився. Будьте першим.

Поскаржитися на запис