代码之家  ›  专栏  ›  技术社区  ›  Stephen M -on strike-

使用基本身份验证的android qr设置

  •  0
  • Stephen M -on strike-  · 技术社区  · 8 年前

    我正在构建一个android信息亭应用程序(作为设备所有者运行),它将不在google play商店中,并且将由二维码提供。

    直到现在,一切都很顺利。我可以签署我的应用程序,建立一个二维码,并得到一个工厂重置平板电脑(三星Galaxy Tab A)阅读二维码安装应用程序,并开始作为一个信息亭。我做这一切都是使用一个本地网络服务器,不安全或在互联网上。

    现在,我将使用我们的面向公众的web服务器,该服务器通过basic auth进行保护。我试过在二维码中使用一个普通的url,如下所示:

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

    显然,<>s填写正确。这不管用,但也不奇怪。我只是希望三星/谷歌的软件足够聪明,能提示我输入用户名和密码。

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

    "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调试以查找更有用的错误消息。

    有没有一种方法可以使它与基本(或任何)身份验证一起工作?或者你对如何得到更有用的错误信息有什么想法?

    更新

    从我们的web服务器查看访问日志,我们可以看到相同的url在web浏览器或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,而不需要用户名和密码。默默无闻是个蹩脚的安全措施,但我看不到更好的选择。建设性地,它将用户名和密码隐藏在二维码之外。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Stephen M -on strike-    8 年前

    下面,qr配置代码使用androiddownloadmanager,显然它不支持url中的基本身份验证,并且配置代码没有参数来提供用户名和密码。所以,为了解决这个短时间的问题(谢谢,谷歌!),我们更改了apache web服务器上的htaccess,以允许以“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>
    

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

    推荐文章