如题所述,我正在尝试在Android中进行摘要身份验证。
到目前为止,我一直使用的是
因此,我打算从
现在我正在尝试实现摘要身份验证,这应该很简单,如这里所解释的那样。
但是由于某种原因,
在寻找此问题的过程中,我发现了不同的帖子,称Android不支持
所以基本身份验证不起作用,因为服务器正在请求摘要。
到目前为止,我一直使用的是
DefaultHttpClient
及其身份验证方法(使用UsernamePasswordCredentials
等),但自Android 5以来已被弃用,并将在Android 6中删除。因此,我打算从
DefaultHttpClient
切换到HttpUrlConnection
。现在我正在尝试实现摘要身份验证,这应该很简单,如这里所解释的那样。
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
但是由于某种原因,
getPasswordAuthentication
从未被调用。在寻找此问题的过程中,我发现了不同的帖子,称Android不支持
HttpUrlConnection
中的摘要认证,但这些帖子来自2010-2012年,所以我不确定这是否仍然正确。此外,我们在桌面Java应用程序中使用具有摘要认证的HttpUrlConnection
,在那里它确实有效。
我还发现了一些关于OkHttp
的帖子。 Android似乎在幕后使用OkHttp
(更具体地说是HttpUrlConnectionImpl
)。但是这个HttpUrlConnectionImpl
有点奇怪,甚至没有在Eclipse类型层次结构中显示,我也无法对其进行调试。而且它应该是一个com.squareup.okhttp.internal.huc.HttpUrlConnectionImpl
,而在android中它是一个com.android.okhttp.internal.http.HttpUrlConnectionImpl
。
所以我无法在android中使用这个HttpUrlConnection
进行摘要认证。
有人能告诉我如何在没有外部库的情况下做到这一点吗?
编辑:
服务器要求摘要认证:
WWW-Authenticate: Digest realm="Realm Name",domain="/domain",nonce="nonce",algorithm=MD5,qop="auth"
所以基本身份验证不起作用,因为服务器正在请求摘要。
HttpUrlConnection
不支持摘要认证,还是默认的java.net.HttpURLConnection
也不支持呢? - Robert PDefaultHttpClient
,但似乎迟早需要切换,所以我将不得不自己实现摘要。谢谢! - Robert P