Вход через Кличат (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. Разделы: вся документация.