在httpAuthHandler继续使用正确的用户名/密码对后,如何使Android webview保存的令牌无效?

问题描述 投票:0回答:1

我有一个webview的实现,我正在使用API​​ loadUrl(url)加载一个url。服务器具有身份验证检查,因此服务器发送401作为响应,由onReceivedHttpAuthRequest(WebView视图,HttpAuthHandler处理程序,String主机,字符串领域)处理。

WebView正在响应第一个401响应的正确实现。在此响应之后,WebView会存储一个用于后续请求的身份验证令牌。

有没有办法使保存的令牌无效?

android authentication webview basic-authentication http-authentication
1个回答
0
投票

每次loadUrl尝试连接到服务器时,我都找到了一种验证用户名/密码对的方法。

你应该使用loadUrl(String url, Map<String, String> additionalHttpHeaders)。此方法接受您要使用相应网址发送的网址和其他HttpHeader。

例如,出于基本身份验证的目的,WebView可以使用以下步骤提交授权标头:

  1. 创建一个由冒号(:)分隔的用户名和密码字符串。例如,username:password
  2. 使用Base64对此字符串进行编码。
  3. 在map中添加键/值对,其中key =“Authorization”和value = result of step 2
  4. 使用上面提到的loadUrl方法使用url提交地图。

我正在为其他开发人员添加以下代码以了解我的解决方案:

@Override
protected void onResume() {
    super.onResume();
    final WebView webView = findViewById(R.id.webview);
    webView.setWebViewClient(new WebViewClient());
    doWebSettings(webView);
    webView.loadUrl(**url you want to load**, getBasicHeader());
}

private void doWebSettings(WebView webView) {
    ***These are example WebSettings**
    final WebSettings webSettings = webView.getSettings();
    webSettings.setAllowFileAccess(true);
    webSettings.setAllowFileAccessFromFileURLs(true);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setAllowUniversalAccessFromFileURLs(true);
}

private Map getBasicHeader() {
    Map<String, String> additionalHeader = new HashMap();
    additionalHeader.put("Authorization", "Basic "+ getEncodedString());
    return additionalHeader;
}

private String getEncodedString(String username, String password) {
    final String userpass = username+":"+password;
    return Base64.encodeToString(userpass.getBytes(),
            Base64.DEFAULT);
}

此解决方案将确保每次加载URL时,服务器都会检查附加标头以进行身份​​验证。因此,WebView不会发送以前经过身份验证的令牌。如果提供的用户名/密码对不正确,则将调用HttpAuthHandler#proceed并调用默认行为,即取消请求。

© www.soinside.com 2019 - 2024. All rights reserved.