0

我正在构建一个 Android 信息亭应用程序(以设备所有者身份运行),它不会出现在 Google Play 商店中,而是由 QR 码提供。

到目前为止,事情一直运作良好。我可以签署我的应用程序,构建二维码并获得恢复出厂设置的平板电脑(三星 Galaxy Tab A)来读取二维码安装应用程序并作为信息亭启动。我使用不安全或在互联网上的本地 Web 服务器完成了这一切。

现在,我开始使用通过基本身份验证保护的面向公众的 Web 服务器。我试过在 QR 码中使用常规 url,如下所示:

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

显然,正确填写了 <>。这不起作用,但并不令人惊讶。我只是希望三星/谷歌的软件足够聪明,可以提示我输入用户名和密码。

所以,然后我用二维码里面的用户名和密码试了一下:

"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)"

我们目前正在考虑,我们将允许在没有用户名和密码的情况下从“AndroidDownloadManager”下载 APK。默默无闻的蹩脚安全,但我没有看到更好的选择。建设性地,它将用户名和密码排除在二维码之外。

4

1 回答 1

1

下面,QR 配置代码使用的是 AndroidDownloadManager,它显然不支持 URL 中的基本身份验证,并且配置代码没有提供用户名和密码的参数。因此,为了解决这个缺点(感谢 Google!),我们更改了 Apache Web 服务器上的 htaccess 以允许以“AndroidDownloadManager”开头并请求 .apk 文件的 UserAgent,然后您不需要进行身份验证。

这是我们的 .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>

不是最好的,但谷歌没有提供最好的钩子。

于 2018-06-12T19:27:53.613 回答