【问题标题】:Inapp browser basic authentication not workingInapp浏览器基本身份验证不起作用
【发布时间】:2016-07-14 08:46:06
【问题描述】:

我有一个类似http://username:password@ipaddress:port//test/test.mjepd.cgi 的网址。 它实际上是在应用浏览器中流式传输相机。

但它适用于笔记本电脑和计算机,而不是移动网络视图。 它简单不加载。

通过浏览一些论坛,我了解到移动应用浏览器 webview 中不支持传递基本身份验证凭据。

非常感谢您对此的任何帮助。

【问题讨论】:

    标签: android android-webview basic-authentication hybrid-mobile-app mobile-application


    【解决方案1】:

    选项 1:将 Authorization 标头添加到请求中:

        HashMap<String, String> headers = new HashMap<String, String>();
        String auth = "Basic " + Base64.encodeToString(password.getBytes("UTF-8"), Base64.NO_WRAP);
        headers.put("Authorization", auth);
        webview.loadUrl(url, headers);
    

    选项 2:通过回调处理身份验证:

        webview.setWebViewClient(new WebViewClient() {
            public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
                if (realm.equals(expectedRealm) && host.equals(ipaddress)) {
                    handler.proceed(username, password);
                } else {
                    handler.cancel();
                }
            }
        });
    

    另外:如果您必须使用基本身份验证,请帮自己一个忙并使用https:;不要以明文形式发送密码。

    【讨论】:

    • 这个 url 调用一个摄像头,然后开始流式传输。它没有启用 OPTIONS,所以我无法用标题调用它。我也在使用 ionic,混合框架。它不支持任何可用插件的 onReceivedHttpAuthRequest。
    • 抱歉,没有注意到 hybrid-mobile-app 标签。我从未使用 Ionic、Cordova 或 Angular.js 进行开发。我浏览了一堆文档,我确信有办法通过自定义插件或自定义 Angular 模块来做到这一点。希望有 Ionic 经验的人可以回答。我的另一个想法是在 URL 中的查询参数上传递您的凭据,并让服务器/防火墙重写 URL 以将凭据移动到正确的位置。 Apache mod_write 确实在身份验证之前重写了 URL,所以这看起来应该可以工作。
    猜你喜欢
    • 2015-03-20
    • 2019-06-08
    • 2019-03-18
    • 2019-06-26
    • 2014-09-06
    • 2014-01-22
    • 2016-01-11
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多