Comments 7
диаграмма вроде понятна, но код я так и не понял. Особенно непонятно как реализуется «сервер авторизации перенаправляет пользователя на callback URL бота с указанием кода авторизации.». То есть страница с авторизацией открывается в самом клиенте телеграма, а потом после успешной авторизации бот получит какое то callback сообщение? Просто не увидел этого в коде. Руки если дойдут, то постараюсь попробовать. Еще раз спасибо
Я так понимаю, бот должен быть ещё и веб-сервером. Сервер авторизации открывает страницу логина в броузере (встроенном в телеграм, наверное), оттуда перенаправляет на страницу веб-сервера бота, и из этого запроса бот получает необходимые данные.
Рад, что статья вам оказалась полезна! :)
То есть страница с авторизацией открывается в самом клиенте телеграма, а потом после успешной авторизации бот получит какое то callback сообщение?
Последовательность будет следующая:
- Пользователь жмет на ссылку в сообщении.
- Эта ссылка открывается в браузере и пользователь попадает на страницу логина сервера авторизации.
- Пользователь заполняет форму логина и нажимает submit, браузер шлет запрос серверу авторизации.
- Если пользователь ввел корректный логин-пароль, сервер авторизации отвечает браузеру статусом 302 с указанием адреса, куда нужно сделать редирект. Этот адрес — это как раз callback URL бота.
- Браузер идет на callback URL.
- В этот момент вызывается метод
AuthEndpoint.authбота, который, собственно, отвечает за обработку запросов, приходящих на на callback URL. В этом методе бот по коду, который есть в параметрах callback URL, запрашивает у сервера авторизации токены.
Только auth flow тут не поток, а процедура...
А так — годное начинание )
Отличная статья, идея гениальная. Использовать state поле для передачи telegramId пользователя очень ловко). Реализовывал данное решение на ASP.NET (C#).
Самостоятельно написал два метода, которые обращаются к Keycloak для получения токенов и сделал простое хранение refresh токенов в бд в с привязкой к telegramId и KeycloakGuid, а токен доступа и состояние пользователя храним в кэше.
Как подружить Telegram-бот с OpenId Connect