如何在Android上永久设置凭据持久性

时间:2012-12-20 10:54:02

标签: android authentication login credentials ntlm

我的应用已保存登录凭据功能,因此我会在成功登录后存储Cookie以供下次使用。但是,经过一段时间后,会话将超时,无法再使用Cookie登录。在iOS上,将凭证持久性设置为永久性后,即使重新启动手机,该应用也可以很好地运行:

[[challenge sender] useCredential:[NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent] forAuthenticationChallenge:challenge];

在Android上,我找不到这种选择。这是来自我的HttpHelper类:

((AbstractHttpClient) HttpHelper.client).getAuthSchemes().register("ntlm",new NTLMSchemeFactory());
  NTCredentials creds = new NTCredentials(user, pass, "", domain);
  ((AbstractHttpClient) HttpHelper.client).getCredentialsProvider().setCredentials(AuthScope.ANY, creds);

服务器是SharePoint,因此我必须按照instruction

处理ntlm身份验证

如果您有任何想法,请告诉我。

谢谢。

6 个答案:

答案 0 :(得分:1)

您是否考虑过使用Android框架提供的Sharedpreferences?请阅读此处了解更多http://developer.android.com/reference/android/content/SharedPreferences.html

答案 1 :(得分:1)

NTCredentials实现了Serializable。

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/auth/NTCredentials.html

简化而无错误处理:

保存:

FileOutputStream fos = openFileOutput("MyFileName", Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(creds);
os.close();

装载:

FileInputStream fis = openFileInput("MyFileName");
ObjectInputStream is = new ObjectInputStream(fis);
NTCredentials creds = (NTCredentials) is.readObject();
is.close();

答案 2 :(得分:1)

这篇文章非常有趣:storing application secrets

答案 3 :(得分:0)

您可以使用共享首选项存储凭据以将其保存在设备端。

答案 4 :(得分:0)

你看过AccountManager了吗?它是一个内置于Android Framework中的通用客户经理框架,专门用于管理帐户凭据。我之前没有使用过ntlm,所以我不能在这方面说话,但你可以存储“authToken”,用户名,密码,还有额外的存储数据位置(我相信{{1} }})。它支持在服务器通知给定帐户的服务器通信失败时尝试重新进行身份验证。如果用户无法自动重新进行身份验证,则可以请求用户再次输入其凭据。所有这些方面都暴露给开发人员以定义行为。

Bundle的优势在于,它允许您让设备在设置中管理您的帐户类型以及设备上的所有其他帐户。

答案 5 :(得分:0)

您可以很好地使用SharedPreference来存储建议存储键值对的凭证

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();

  editor.putString("Name","Harneet");//adding Harneet(value) in Name(key) pairs which can be fetched later with the help of key i.e. Name(key)
  editor.commit(); // saving the preferences

从共享首选项中检索值:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("Name","");
if(!name.equalsIgnoreCase(""))
 {
  name = name+"  Sethi";  /* Edit the value here*/
 } 

这些是您可以存储和获取凭证的方法::

希望这些可以帮到你!! :)