Обработчик укладывается примерно в 250 строк PHP, без Composer и без внешних зависимостей;
проверено на канале Telegram.
Почему это не настройка входа
Поэтому здесь не нужен ни плагин, ни готовый рецепт CMS: нужен небольшой серверный обработчик, который вы кладёте рядом с формой.Почему обязателен серверный обработчик
Сделать это одним браузерным скриптом нельзя, и упирается это в три вещи сразу:- поддерживается только Authorization Code Flow (плюс refresh) — implicit и hybrid отсутствуют;
- CORS не настроен ни на одном эндпоинте;
- access token — непрозрачный идентификатор, а интроспекция требует confidential-клиента с секретом, которого браузерный скрипт хранить не может.
Схема
- пользователь жмёт кнопку под формой;
- переход на
/connect/authorizeс PKCE S256,stateиnonce— плюсacr_values, если нужен конкретный канал; - возврат на
redirect_uri— обычную страницу вашего сайта; - сервер меняет код на токены и проверяет
iss,aud,expиnonce; - рядом с заявкой записывается «подтверждено:
sub+channel_type»; - кука аутентификации не ставится — входа не происходит.
Про проверку подписи
Проверять подписьid_token JWT-библиотекой здесь не обязательно: OIDC Core §3.1.3.7,
правило 6 разрешает клиенту, получившему токен прямым обращением к токен-эндпоинту,
полагаться на проверку TLS вместо проверки подписи. Именно поэтому обработчику не нужны ни
JWT-библиотека, ни Composer.
Свои кнопки на своей странице
Две кнопки под формой — «Через Telegram» и «любым способом» — делаются параметром authorize-запроса:acr_values=channel:telegram сужает выбор до одного канала, без параметра
пользователь выбирает сам.
Виджета или JS-SDK для этого не существует и не требуется: «своя кнопка» — это ссылка с нужными
параметрами, а не встраиваемый компонент.