Skip to content

Поддержка OAuth/OIDC-провайдеров (Telegram без номера, Google и др.) #79

Description

@Pinkerton28

Здравствуйте! Спасибо огромное за SHM и за то, что проект продолжает активно развиваться — особенно за улучшение привязки Telegram через виджет в 2.10 и за поле login2. Пользуемся с удовольствием.

Хотел предложить одно направление на будущее, если оно созвучно вашим планам. Речь про внешних OAuth/OIDC-провайдеров. Сейчас в SHM такая интеграция есть только с Telegram (через Login Widget), и у неё, и в целом у идеи добавить Google, есть пара мыслей.


1. Telegram — через OIDC (tap-to-auth без ввода номера)

Текущий Login Widget (POST /telegram/web/auth с uid + bind_to_profile: 1) на мобильных браузерах и там, где юзер не залогинен в web.telegram.org, просит ручной ввод номера телефона. На практике это заметно снижает конверсию привязки TG у пользователей, зашедших в ЛК с телефона.

Telegram не так давно выкатил OIDC-флоу для сайтов, где подтверждение идёт тапом в самом приложении, без номера:

  • Authorization: https://oauth.telegram.org/auth (PKCE, response_type=code)
  • Token: https://oauth.telegram.org/token
  • Discovery: https://oauth.telegram.org/.well-known/openid-configuration
  • JWKS: https://oauth.telegram.org/.well-known/jwks.json
  • Setup: @Botfather → Bot Settings → Web Login → client_id + client_secret
  • Scopes: openid, profile, phone, telegram:bot_access

Было бы здорово, если бы появился эндпоинт, принимающий id_token (JWT), который валидирует подпись по JWKS и iss/aud/exp, достаёт telegram-данные и выполняет ту же логику bind, что и текущий web_auth. Фронту тогда достаточно заменить виджет на OIDC-редирект.

Документация: https://core.telegram.org/bots/telegram-login


2. Google (и по аналогии Yandex / VK / Apple)

Сейчас в SHM нет интеграций с внешними OAuth/OIDC-провайдерами, кроме Telegram. Для пользователей, которые регистрируются по email, привычный «Войти через Google» сильно снижает трение на этапе входа — не нужно помнить пароль, не нужен reset-флоу.

Примерный набросок API, которого хватило бы для ЛК:

  • эндпоинт принимает Google id_token (credential из Google Identity Services),
  • валидирует его по Google JWKS (https://www.googleapis.com/oauth2/v3/certs),
  • проверяет aud = настроенный Google Client ID, iss = accounts.google.com,
  • по email ищет пользователя; если есть — выдаёт сессию (как /user/auth), если нет — опционально создаёт с login=email и случайным паролем,
  • параметры (client_id, allowed_domains, auto_register) — через конфигурацию SHM, чтобы инстансы могли включать/выключать фичу.

По аналогии потом легко добавить Yandex / VK / Apple — эндпоинты очень похожие, отличаются в основном URL JWKS и именами полей.

Документация по Google:


Понимаю, что объём работы тут немаленький и приоритетов хватает и без этого. Если задача не попадёт в ближайшие релизы — это совершенно нормально, никакого давления. Просто хотел оставить идею на радаре.

Спасибо!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions