Android QR Provisioning с использованием базовой аутентификации - PullRequest
0 голосов
/ 06 июня 2018

Я создаю приложение для киосков Android (работает как владелец устройства), которого не будет в Google Play Store, и которое будет предоставлено QR-кодом.

До сих пор все работало довольно хорошо.Я могу подписать свое приложение, создать QR-код и получить планшет с заводскими настройками (Samsung Galaxy Tab A), чтобы прочитать QR-код, установить приложение и начать работу в качестве киоска.Я сделал все это, используя локальный веб-сервер, который не защищен, или в Интернете.

Теперь я перехожу к использованию нашего общедоступного веб-сервера, который защищен с помощью обычной аутентификации.Я пытался просто использовать обычный URL-адрес в QR-коде, как это:

"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://<fully_qualified_server_name>/<path_to_apk>/<apk_name>"

Очевидно, что <> заполнены правильно.Это не работает, но не слишком удивительно.Я просто надеялся, что программное обеспечение Samsung / Google будет достаточно умным, чтобы запросить у меня имя пользователя и пароль.

Итак, я попробовал его с именем пользователя и паролем внутри QR-кода:

"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://<username>:<password>@<fully_qualified_server_name>/<path_to_apk>/<apk_name>"

Но это тоже не сработало.И то и другое выдает сообщение об ошибке:

Oops!  Couldn't download the admin app.

Второй URL-адрес корректно работает с wget, поэтому я не думаю, что здесь есть опечатка.первый сбой с wget, потому что ему нужны имя пользователя и пароль.

Поскольку планшет еще не настроен, я не могу включить отладку по USB, чтобы найти более полезное сообщение об ошибке.

Есть ли способ заставить это работать с базовой (или любой) аутентификацией?Или есть идеи, как получить более полезное сообщение об ошибке?

ОБНОВЛЕНИЕ

Просматривая журнал доступа с нашего веб-сервера, мы видим, что тот же URL работает правильноиз веб-браузера или wget, но Android не работает с:

<hostname_redacted> 72.48.253.220 - - [11/Jun/2018:10:35:14 -0500] "GET /2.13.0/ORPanel-0.1-release.apk HTTP/1.1" 401 487 "-" "AndroidDownloadManager/7.0 (Linux; U; Android 7.0; SM-T580 Build/NRD90M)"

В настоящее время мы думаем, что разрешим загрузку APK из "AndroidDownloadManager" без имени пользователя и пароля.Хромая безопасность по неизвестности, но лучшего варианта я не вижу.Конструктивно он не позволяет вводить имя пользователя и пароль в QR-код.

1 Ответ

0 голосов
/ 12 июня 2018

Ниже, код обеспечения QR использует AndroidDownloadManager, который, очевидно, не поддерживает Basic Auth в URL, а код обеспечения не имеет аргументов для предоставления имени пользователя и пароля.Итак, чтобы обойти этот недочёт (спасибо, Google!), Мы изменили htaccess на нашем веб-сервере Apache, чтобы разрешить агентам пользователя, которые начинаются с «AndroidDownloadManager» и запрашивают файл .apk, тогда вам не нужно проходить аутентификацию.

Вот наш .htaccess:

SetEnvIfNoCase User-Agent "^AndroidDownloadManager" ANDROID
AuthType Basic
AuthName "Inst"
AuthUserFile <redacted>
require valid-user
<FilesMatch "\.(apk)$">
Order allow,deny
Allow from env=ANDROID
Satisfy Any
</FilesMatch>

Не совсем лучший, но Google не предоставляет хуков для лучшего.

...