Войти

Вход через Кличат (OAuth2)

Приложение может входить за пользователя: получает одноразовый код, меняет его на токен и читает профиль. Схема — authorization code с PKCE, как у Discord; scope пока один: identify.

1. Ссылка авторизации

https://klichat.ru/oauth2/authorize
  ?client_id=<id приложения>
  &response_type=code
  &scope=identify
  &redirect_uri=<адрес из настроек приложения>
  &state=<случайная строка>
  &code_challenge=<BASE64URL(SHA256(verifier))>   # для публичных клиентов
  &code_challenge_method=S256

Пользователь видит, какое приложение просит вход и что именно оно получит, и подтверждает. После согласия он возвращается на redirect_uri с code и state.

redirect_uri должен точно совпадать с одним из адресов в настройках приложения («Настройки → Боты → …»). Схема — только https; http допускается лишь для localhost.

2. Обмен кода на токен

POST /api/v1/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=<id>
&code=<код>
&redirect_uri=<тот же адрес>
&code_verifier=<verifier>        # публичный клиент (PKCE)
&client_secret=<секрет>          # серверный клиент

Ответ:

{"access_token": "klo_…", "token_type": "Bearer", "expires_in": 604800, "refresh_token": "klo_…", "scope": "identify"}

Серверный клиент может подтвердить себя и заголовком Authorization: Basic base64(client_id:client_secret). Код одноразовый и живёт 10 минут.

3. Профиль пользователя

GET /api/v1/users/@me
Authorization: Bearer klo_…

Токен приложения принимается только этой ручкой: доступ к сообщениям, серверам и настройкам по нему закрыт — токен выдан приложению, а не пользователю.

4. Обновление и отзыв

POST /api/v1/oauth2/token        grant_type=refresh_token&client_id=…&refresh_token=…
POST /api/v1/oauth2/token/revoke token=<access или refresh>

Обновление выдаёт новую пару: прежний refresh перестаёт работать. Отзыв по RFC 7009 всегда отвечает успехом, даже если токена уже нет.

Секрет приложения

«Настройки → Боты → приложение → Сбросить client_secret» — показывается один раз. Публичным клиентам (мобильные, настольные, SPA) секрет не нужен: им хватает PKCE.

Полное описание REST — OpenAPI 3.1. Разделы: вся документация.