【发布时间】:2012-11-16 17:24:54
【问题描述】:
在我的应用程序中,我通过 HTTPS 对 Web 服务进行 HTTP 调用。我的愿望是设计我的客户端,使其仅在遇到身份验证挑战时询问用户的用户名和密码。我想要响应式,而不是抢占式。由于我的应用的性质,在某些情况下它不需要进行身份验证。
在 iOS 中,这个过程通过NSURLConnectionDelegateProtocol 变得非常简单,这是在我的应用程序的 iOS 版本中实现的。使用此类建立连接,并且只有在提出质询时,该类才会向其委托请求身份验证凭据。
如何在 Android 中做到这一点?使用AuthenticationHandler?或者Authenticator?如果可以,能否提供示例或教程?
编辑 1:
使用 Authenticator 类(请参阅下面的答案)我现在能够响应身份验证挑战,但目前只能使用硬编码凭据。我想提示用户输入用户名和密码。根据Android documentation,在getPasswordAuthentication 方法中,您“通常会提示用户输入所需的输入”。
这怎么可能?在不阻塞 UI 线程(我知道不能/不应该完成)的情况下,如何在该方法中显示对话框、等待用户输入、然后检索输入的凭据并返回它们?
编辑 2:
虽然很少或没有关于使用 Authenticator 类的示例,但我能够找到的结果表明,在单个方法中提示用户输入是不可能的,例如 getPasswordAuthentication。可能必须恢复到 Apache Http 客户端...
最终编辑:
我仍在使用 HttpURLConnection,但按照 Edward 下面的建议做一些事情。似乎没有任何可配置的类来处理身份验证挑战和提示用户输入,所以我手动执行此操作。
【问题讨论】:
标签: android http authentication https