Погасить одноразовый токен запуска слота интерфейса
Единственная дверь, за которой приложение узнаёт, кто из людей кабинета открыл его панель. Зовёт её сервер приложения своим токеном установки, предъявляя одноразовый токен запуска, который оболочка Akeda передала странице сообщением моста.
ЧТО ПРИЛОЖЕНИЕ УЗНАЁТ О ЧЕЛОВЕКЕ: псевдоним, язык и тему. Ни имени, ни почты, ни числового идентификатора, ни ролей. Псевдоним (actor.subject) свой у каждой пары «установка + человек»: он устойчив, поэтому панель помнит выбор конкретного сотрудника, и бесполезен за пределами установки. Числовой идентификатор не отдаётся потому, что реестр людей в Akeda общий на всю платформу — по нему приложение, стоящее в двух кабинетах, связало бы двух разных клиентов между собой. Псевдоним умирает вместе с установкой: после переустановки это для приложения новые люди.
ТОКЕН ОДНОРАЗОВЫЙ и живёт минуту. Он проходит через браузер человека, то есть попадает в код чужой страницы, её консоль и журналы её собственного сервера; многоразовый превратил бы каждый такой след в возможность назваться тем человеком. Второе предъявление отвечает 410 и остаётся в журнале установки отдельной записью — повтор означает либо утечку токена, либо переигрывание запросов приёмником, и разбирают это люди. Не дошедший запуск не чинится повтором: человек открывает панель заново, это одно нажатие.
NONCE придумывает САМА страница расширения и присылает его оболочке сообщением akeda.slot.ready; оболочка запрашивает запуск под этим значением и возвращает его тем же сообщением. Благодаря этому страница отличает ответ на свой запрос от чужого сообщения, посланного ей извне: проверки источника для этого мало — она доказывает, КТО прислал, но не то, что прислано в ответ. Неверный nonce отвечает 400 и живой запуск НЕ сжигает.
Кабинета в адресе нет: он берётся из токена установки. Чужой запуск отвечает 404 — тем же, чем отвечает несуществующий, потому что «есть, но не ваш» рассказало бы о запуске в соседнем кабинете.
КАКИМ ТОКЕНОМ ГАСИТЬ. Сообщение akeda.slot.launch несёт поле tenant — slug кабинета, в котором выдан запуск; тот же slug сервер приложения называет при самовыдаче токена установки (POST /api/v1/app/token). Сервер, обслуживающий много кабинетов, берёт токен установки этого кабинета и не перебирает остальные. Поле — открытая метка, а не доверие: страница могла назвать любой кабинет, и гашение его не читает. Запуск, предъявленный токеном установки другого кабинета, отвечает 404 и живым для своей установки остаётся. Поле может отсутствовать (оболочка прежней версии) — тогда приложение выбирает установку так же, как до его появления.
Request
- Base URL: https://erp.akeda.ru
- URL: https://erp.akeda.ru/api/v1/app/slot-launch
- Auth: HTTP bearer
Headers
Slug выбранного кабинета; кабинет не является юрлицом
Request body
Response
Контекст запуска: кабинет, слот, псевдоним человека и запись, на которой открыли панель
Changes
No recorded changes to this operation across all 1 revision of this API.