Поддержка Cloudflare + Okta (и сопутствующие решения)
Мне удалось настроить аутентификацию Okta через Cloudflare для защиты моего домена/логина SecSpy в интернете. Довольно круто.
Однако... это ломает приложение SecSpy для iOS. Я знал об этом заранее. На данный момент это не проблема, поскольку у меня также есть точка входа Tailscale.
В ходе беседы с ИИ на тему «Как SecSpy может поддерживать Okta?» я получил следующую информацию:
Вариант 1: «Золотой стандарт» решения (поддержка OIDC)
Запрос: «Пожалуйста, добавьте поддержку аутентификации OIDC (OpenID Connect) или OAuth2ASWebAuthenticationSession на iOS».
Как это работает:
- Вместо ввода имени пользователя/пароля в приложение, оно обнаруживает перенаправление Cloudflare/Okta.
- Приложение открывает защищенное окно системного браузера (это компонент iOS, называемый
ASWebAuthenticationSession). - В этом окне вы увидите фактическую страницу входа в Okta, выполните FaceID/Push-уведомление и получите авторизацию.
- Окно браузера закрывается и возвращает приложению Security Spy токен сессии (Cookie).
- Приложение прикрепляет этот токен к каждому последующему запросу видео.
Примечание: Так работают системы единого входа (SSO) в таких приложениях, как Slack, Zoom и Google Drive.
Вариант 2: Более простое решение (сервисные токены)
Запрос: «Пожалуйста, разрешите пользователям определять пользовательские HTTP-заголовки в настройках подключения к серверу».
Как это работает:
- В Cloudflare вы генерируете сервисный токен (специальный логин/пароль, предназначенный для ботов, а не для людей).
- Этот токен состоит из двух длинных строк:
CF-Access-Client-IdиCF-Access-Client-Secret. - Если бы в приложении Security Spy было поле "Добавить пользовательские заголовки", вы бы вставили туда эти две строки.
- Cloudflare видит эти заголовки и сообщает: «О, это авторизованное приложение», полностью минуя экран входа в Okta.
Решение, которое вы можете использовать СЕГОДНЯ (обход "варп-пространства")
Поскольку вы не можете заставить Ben Software переписать свое приложение в эти выходные (😅 Примечание: я никогда не предлагал ИИ переписать Security Spy в эти выходные) , вы можете решить эту проблему прямо сейчас, используя уже имеющийся у вас инструмент: Cloudflare WARP .
Вы упомянули ранее, что рассматривали WARP (Вариант 2), но пропустили его. Вот пример его применения.
Логика: Вместо того чтобы заставлять приложение аутентифицироваться в Okta, вы заставляете свой телефон аутентифицироваться в Okta (через VPN), и тогда приложение получает бесплатный доступ.
- Установите приложение "Cloudflare One" (WARP) на свое устройство iOS.
- Войдите в приложение: перейдите в Настройки > Аккаунт > Войти с помощью Cloudflare Zero Trust.Введите домен вашей команды.
- Вам будет предложено пройти аутентификацию через Okta (используя ваше правило FaceID).
- Результат: Ваш телефон теперь находится «внутри» вашей защищенной сети.
- Объездная дорога:В панели управления Cloudflare (Zero Trust) создайте политику обхода для вашего приложения Security Spy.
- Действие: Обход.
- Включите: "WARP" (или "Gateway").
- Перевод: «Если пользователь уже авторизован в VPN-сервисе WARP на своем телефоне, не просите его повторно авторизоваться на веб-сайте».
Исход:
- Веб-браузер: по-прежнему защищен Okta.
- Приложение для слежки за безопасностью: работает мгновенно, потому что клиент WARP на вашем телефоне обрабатывает подтверждение личности в фоновом режиме. Вы получаете безопасность Okta без необходимости поддержки этой технологии приложением.
Я дополнительно уточнил у ИИ стоимость/сложность OIDC. Ответ:
------------
Финансовые затраты: нулевые. OpenID Connect (OIDC) — это открытый стандарт. Apple, Okta и любые другие регулирующие органы не несут никаких лицензионных сборов за его внедрение.
Стоимость разработки (время и трудозатраты): от средней до высокой. Для одного разработчика или небольшой команды (например, Ben Software) «стоимость» полностью сводится ко времени и сложности.
Вот почему они этого ещё не сделали:
- Проблема «замены движка»: В настоящий момент приложение Security Spy, скорее всего, использует HTTP Basic Auth . Всё просто: каждый раз, когда оно запрашивает видеокадр, оно отправляет
username:passwordзаголовок. OIDC — это конечный автомат . Приложение должно:Обнаружено, что требуется авторизация. - Приостановите запрос на видео.
- Откройте окно браузера.
- Дождитесь кода обратного вызова.
- Обменяйте этот код на "токен".
- Надежно сохраните этот токен в связке ключей iOS.
- Прикрепляйте этот токен к каждому будущему запросу.
- Самая сложная часть: отслеживать, когда истекает срок действия этого токена (обычно каждый час), и незаметно использовать «токен обновления», чтобы получить новый, не напоминая пользователю об этом.
- Для этого требуется переписать весь сетевой уровень приложения. Это не просто добавление функции; это изменение внутренней структуры.
- «Нишевый» фактор: большинство пользователей Security Spy — это домашние пользователи, которые просто настраивают переадресацию портов или используют встроенный в Ben сервис DDNS. Пользователи, подобные вам, которые устанавливают коммерческий поставщик идентификационных данных с нулевым доверием (Okta + Cloudflare) перед системой видеонаблюдения на Mac Mini, составляют 1% лучших из 1%.
Если он добавит возможность вручную вставлять статический API-токен (например, упомянутый ранее токен службы Cloudflare) в настройки приложения, это, вероятно, займет у него около часа. Полная поддержка OIDC, скорее всего, потребует серьезной переработки кода. Запрос на добавление "пользовательского заголовка" с гораздо большей вероятностью получит положительный ответ.
@Ben что ты думаешь?😁
Комментарии
Хотя я ценю ваши усилия по повышению безопасности, я считаю, что это выходит за рамки возможностей нашего приложения. Предлагаемый вами подход потребует значительных усилий по разработке и будет использоваться крайне ограниченным числом пользователей, поскольку существующие методы удаленного доступа уже хорошо работают и гораздо менее сложны:
Я тебя понимаю.
Мне кажется, идея с "пользовательским заголовком" довольно хороша и, возможно, не так уж сложна в реализации?
Я буду продолжать тебя изматывать, Бен! 😅
Если говорить серьёзно, да, я выступаю за решения корпоративного уровня в области безопасности, потому что, по правде говоря, Security Spy — это отличное программное обеспечение. На данный момент оно очень зрелое, и с учётом мощного и недорогого оборудования, доступного сегодня, Security Spy (по моему скромному мнению) находится на грани того, чтобы стать полноценным решением корпоративного класса для систем видеонаблюдения. И хотя я понимаю, что многие ваши пользователи, вероятно, не знакомы со всеми этими функциями и не стали бы их использовать, я также знаю, что сам когда-то начинал как пользователь Security Spy… но теперь, отчасти благодаря вам и всем тем замечательным функциям, которые вы ранее реализовали (поток событий — это то, с чего я начал и что привело меня к этому), — я эволюционировал. И мои требования к безопасности стали выше. И я не хочу перерасти Security Spy. Я хочу использовать его всегда.
Так что... имейте всё это в виду и, пожалуйста, добавьте мои идеи в общую кучу. 😁
Я хотел бы поддержать желание иметь возможность использовать OIDC или SAML2, хотя я использую Authentik вместо Cloudflare Warp.
К вашему сведению, мы добавили возможность добавления пользовательских заголовков ко всем HTTP-ответам SecuritySpy. Эта опция находится в разделе «Настройки» > «Веб» > «Расширенные параметры веб-интерфейса». Она будет включена в предстоящее обновление 6.21, но уже доступна в бета-версии, если кто-то захочет ею воспользоваться сейчас.
О, только что увидел это. С нетерпением жду, когда смогу попробовать. Спасибо, Бен!