Files
shd-desktop-app/README.md
T
bulava92 29a8b935fb
Windows desktop build / publish (push) Canceled after 0s
Add Windows desktop app
2026-10-28 16:04:52 +03:00

2.9 KiB
Raw Blame History

SHD Desktop

Исходники настольного приложения SHD для Apple и Windows.

Папки

  • Apple/ — приложение macOS на Swift и WKWebView.
  • Windows/ — приложение Windows на WPF и WebView2, установочные сценарии и инструкция.

Вход в macOS-приложении

Клик по существующей кнопке passkey на странице входа в WKWebView перехватывается приложением и открывает тот же DEV-сайт в системном браузере. После входа callback возвращает код в приложение, а WKWebView отправляет его серверу и получает веб-сессию. Вход в приложении пока включён только для DEV, где серверный поток уже развёрнут.

Серверный поток развёрнут на DEV. Клиент использует такой контракт:

  1. GET /desktop-auth/authorize с параметрами client_id=shd-macos, redirect_uri=shd-auth://callback, response_type=code, state, code_challenge и code_challenge_method=S256. После обычного входа, включая passkey, сервер возвращает браузер на shd-auth://callback?code=…&state=….
  2. POST /desktop-auth/complete с полями code и code_verifier. Сервер проверяет одноразовый код и PKCE, создаёт веб-сессию, устанавливает защищённую cookie и перенаправляет WKWebView на SHD.

Код должен быть одноразовым, связанным с PKCE и действовать не более 60 секунд. Callback URI фиксирован в приложении. Маршрут завершения должен принимать только такой код и verifier; исключение CSRF-защиты допустимо только для этого маршрута при обязательной проверке кода и PKCE.

Windows-приложение

Windows-клиент находится в Windows/. Он открывает сайт в WebView2 и запускает passkey-вход по той же кнопке на странице, что и macOS-версия. Сборка создаётся GitHub Actions workflow Windows desktop build; инструкция по установке и получению архива находится в Windows/README.md.

Сборка macOS-приложения

Из каталога Apple/ запустить ./Scripts/build-app.sh. Сборка создаёт проверенный архив Apple/dist/SHD-macOS-arm64.zip и не устанавливает приложение в /Applications.