Android 使用基本身份验证的 QR 配置
Android QR Provisioning using basic auth
我正在构建一个 Android 自助服务终端应用程序(以设备所有者身份运行),该应用程序不会出现在 Google Play 商店中,将由二维码提供。
到目前为止,一切进展顺利。我可以签署我的应用程序,构建一个 QR 码并获得恢复出厂设置的平板电脑(Samsung Galaxy Tab A)以读取 QR 码安装应用程序并作为信息亭启动。我使用不安全的本地 Web 服务器或在 Internet 上完成这一切。
现在,我将转向使用我们的 public 面向 Web 服务器,该服务器通过基本身份验证受到保护。我试过在 QR 码中使用常规 url,如下所示:
"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://<fully_qualified_server_name>/<path_to_apk>/<apk_name>"
显然 <> 填写正确。这行不通,但并不奇怪。我只是希望 Samsung/Google 的软件足够智能,可以提示我输入用户名和密码。
所以,然后我用二维码里面的用户名和密码试了一下:
"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 而无需用户名和密码。默默无闻的蹩脚安全性,但我没有看到更好的选择。建设性地,它将用户名和密码保留在二维码之外。
下面,QR 配置代码使用的是 AndroidDownloadManager,它显然不支持 URL 中的 Basic Auth,并且配置代码没有提供用户名和密码的参数。因此,为了解决这个问题(感谢 Google!),我们更改了 Apache Web 服务器上的 htaccess 以允许以 "AndroidDownloadManager" 开头并请求 .apk 文件的 UserAgents,然后您就不需要' 需要验证。
这是我们的 .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 没有提供最好的钩子。
我正在构建一个 Android 自助服务终端应用程序(以设备所有者身份运行),该应用程序不会出现在 Google Play 商店中,将由二维码提供。
到目前为止,一切进展顺利。我可以签署我的应用程序,构建一个 QR 码并获得恢复出厂设置的平板电脑(Samsung Galaxy Tab A)以读取 QR 码安装应用程序并作为信息亭启动。我使用不安全的本地 Web 服务器或在 Internet 上完成这一切。
现在,我将转向使用我们的 public 面向 Web 服务器,该服务器通过基本身份验证受到保护。我试过在 QR 码中使用常规 url,如下所示:
"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://<fully_qualified_server_name>/<path_to_apk>/<apk_name>"
显然 <> 填写正确。这行不通,但并不奇怪。我只是希望 Samsung/Google 的软件足够智能,可以提示我输入用户名和密码。
所以,然后我用二维码里面的用户名和密码试了一下:
"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 而无需用户名和密码。默默无闻的蹩脚安全性,但我没有看到更好的选择。建设性地,它将用户名和密码保留在二维码之外。
下面,QR 配置代码使用的是 AndroidDownloadManager,它显然不支持 URL 中的 Basic Auth,并且配置代码没有提供用户名和密码的参数。因此,为了解决这个问题(感谢 Google!),我们更改了 Apache Web 服务器上的 htaccess 以允许以 "AndroidDownloadManager" 开头并请求 .apk 文件的 UserAgents,然后您就不需要' 需要验证。
这是我们的 .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 没有提供最好的钩子。