Макросервис авторизации в Modeus через Microsoft
Зачем нужен этот сервис
ModeusSchedule.MSAuth — это вспомогательный HTTP-сервис, который автоматизирует авторизацию в Microsoft, заходит в веб-интерфейс Modeus и извлекает свежий id_token (JWT). Этот токен затем может использоваться другими компонентами вашей системы для обращения к API Modeus без ручного входа пользователя. Проект устраняет необходимость хранить пользовательские cookie, а также упрощает раздачу короткоживущих токенов другим сервисам через REST‑эндпоинт.
Почему макросервис?
Total Image size: 1.4 GB
Potential wasted space: 6.5 MB
Image efficiency score: 99 %
Внутри находится полноценный браузер Chromium с Playwright, что требует "значительных" ПЗУ ресурсов. Поэтому такой сервис лучше запускать отдельно от основных приложений.
Ключевые возможности
- Браузерная авторизация через Playwright и Chromium в режиме headless.
- Кэширование токена на 20 минут, чтобы избежать лишних логинов.
- Ограничение параллельных попыток авторизации (возврат HTTP 429, если процесс уже идет).
- Опциональная защита API ключом (заголовок
X-API-Key). - Простой REST‑эндпоинт
GET /auth/ms, который возвращает JSON{ "jwt": "..." }.
Как это работает
- Сервис при старте проверяет, что заданы параметры подключения к Modeus и учетные данные Microsoft (
MODEUS_URL,MS_USERNAME,MS_PASSWORD). - При первом запросе Playwright поднимает headless Chromium и логинится в Modeus через Microsoft IDP.
- После успешного входа токен
id_tokenизвлекается изsessionStorage, сохраняется в памяти и отдается клиенту. - Пока токен свежий, новые запросы обслуживаются из кэша. Как только TTL истекает, запускается новая авторизация.
Конфигурация
| Параметр | Где задается | Назначение |
|---|---|---|
MODEUS_URL |
appsettings.json / переменные окружения |
URL портала Modeus (например, https://<название вуза>.modeus.org/). |
MS_USERNAME |
appsettings.json / переменные окружения |
Логин сервисной учетной записи Microsoft 365. |
MS_PASSWORD |
appsettings.json / переменные окружения |
Пароль от этой учетной записи. |
MS_TOTP_SECRET (опционально) |
appsettings.json / переменные окружения |
Секрет для генерации TOTP-кодов. |
API_KEY (опционально) |
appsettings.json / переменные окружения |
Если задан, сервис будет требовать заголовок X-API-Key. |
Быстрый старт
- Установите .NET 9 SDK и Playwright (будет установлен автоматически при первом запуске).
- Создайте файл
appsettings.Development.jsonили задайте переменные окружения с параметрами из таблицы выше. - Соберите и запустите сервис:
cd src
dotnet run
или
docker compose -f docker-compose-dev.yml up
- Выполните запрос:
curl -H "X-API-Key: <ваш ключ>" http://localhost:5000/auth/ms
В ответ вы получите JSON с полем jwt. При повторных вызовах в пределах времени жизни кэша сервис не будет заново входить в Microsoft.
Безопасность и эксплуатация
- Используйте отдельную сервисную учетную запись Microsoft с минимально необходимыми правами.
- Ограничьте доступ к эндпоинту по сети (VPN, reverse proxy) и включите проверку
API_KEY. - Логи Playwright могут содержать диагностическую информацию, поэтому убедитесь, что они не раскрывают пароли.
Идеи для улучшений
- Сброс кэша по запросу.
- Переписать на TypeScript с использованием Playwright напрямую.
Лицензия
Проект распространяется под лицензией MIT. Подробнее в файле LICENSE.