Войти через ReMeet (OAuth)
Когда вашему серверу нужно действовать от имени человека — читать его встречи, создавать новые, — он просит доступ по OAuth 2.0 (код авторизации + PKCE S256). Человек видит окно согласия ReMeet со списком того, что сможет приложение, и нажимает Разрешить. Отозвать доступ можно в любой момент: Настройки → Подключённые приложения.
Нужно ли вам это?
Приложению без сервера — нет. Чтобы узнать, кто открыл приложение во встрече, хватает контекст-токена. OAuth нужен, чтобы вызывать REST API от имени человека.
Получите ключи
В кабинете разработчика: ваше приложение → API и вебхуки → Создать ключи. Вы получите client_id и client_secret. Секрет показывается один раз — храните его только на сервере. Потеряли — нажмите Новый секрет клиента (старый сразу перестанет работать).
Добавьте адреса возврата вашего сервера (https; для разработки можно http://localhost).
Права (scopes)
| Право | Что видит человек |
|---|---|
profile | Видеть ваше имя, язык и часовой пояс |
email | Видеть вашу почту |
meetings.read | Видеть ваши встречи: названия, время и ссылки |
meetings.write | Создавать встречи от вашего имени |
Без scope вы получите profile. Просите только то, чем пользуетесь.
Схема с вашего сайта
Отправьте человека на адрес авторизации:
https://remeet.video/oauth/authorize ?client_id=ВАШ_CLIENT_ID &redirect_uri=https://your-site.example/oauth/callback &response_type=code &scope=profile meetings.read &state=СЛУЧАЙНАЯ_СТРОКА &code_challenge=BASE64URL(SHA256(code_verifier)) &code_challenge_method=S256После Разрешить ReMeet вернёт его на
redirect_uri?code=…&state=…. Проверьте, чтоstateваш.Сервер меняет код на токены:
bashcurl -X POST https://remeet.video/oauth/token \ -d grant_type=authorization_code \ -d client_id=ВАШ_CLIENT_ID \ -d client_secret=ВАШ_CLIENT_SECRET \ -d redirect_uri=https://your-site.example/oauth/callback \ -d code=КОД_ИЗ_ШАГА_2 \ -d code_verifier=ИСХОДНЫЙ_VERIFIERjson{ "token_type": "Bearer", "expires_in": 3600, "access_token": "eyJ…", "refresh_token": "def5…" }Вызывайте REST API с
Authorization: Bearer <access_token>.
Access-токен живёт 1 час, refresh-токен — 30 дней. Обновление:
curl -X POST https://remeet.video/oauth/token \
-d grant_type=refresh_token -d refresh_token=… \
-d client_id=… -d client_secret=… -d scope="profile meetings.read"Если человек уже разрешал те же права, ReMeet не спрашивает снова и сразу возвращает код.
Схема изнутри встречи: app.authorize()
Во встрече приложение может попросить доступ, не выходя из звонка, — как в Zoom и Discord. ReMeet открывает окно согласия поверх встречи и отдаёт код вашей рамке:
const app = await ReMeet.ready();
document.getElementById('connect').onclick = async () => {
const verifier = randomString(64); // сохраните для своего сервера
const challenge = await sha256base64url(verifier);
try {
const { code, redirect_uri } = await app.authorize({
scopes: ['profile', 'meetings.read'],
codeChallenge: challenge,
});
// Сервер меняет код: grant_type=authorization_code, redirect_uri, code_verifier, client_secret.
await fetch('https://api.your-site.example/remeet/connect', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ code, redirect_uri, verifier, contextToken: app.contextToken }),
});
} catch (error) {
if (error.code === 401) app.notify('Без доступа приложение работает в простом режиме');
}
};- Вызывайте
authorize()сразу по нажатию в приложении, иначе браузер заблокирует окно (ошибка409). redirect_uriвсегдаhttps://remeet.video/oauth/sdk-callback— он разрешён каждому приложению автоматически; передайте его в обмен кода как есть.- Ошибки:
401— человек не разрешил;410— закрыл окно;404— у приложения ещё нет ключей. - В симуляторе
authorize()возвращает ненастоящий код без окна.
Метаданные сервера
Стандартные метаданные OAuth (RFC 8414) для библиотек, которые настраиваются сами: remeet.video/.well-known/oauth-authorization-server.
Кто может войти
Опубликованное приложение — любой. Приложение на тестировании — только вы и его тестировщики; для остальных адрес авторизации отвечает «не найдено».