安卓如何使用Kerberos进行身份验证

13

我正在尝试创建一个使用现有网络服务的Android应用程序。然而,现有的网络服务使用Kerberos进行身份验证,我无法让Android使用android-xmlrpc库来进行身份验证。如果有人有相关经验,请回复。

我完全是新手,所以任何建议都将不胜感激!

谢谢, Dave


如果您描述一下您的问题是什么,将会很有帮助。您尝试过什么?能给出一些代码示例吗?您在第一次使用xmlrpc时是否已经完成了身份验证?... - Fildor
2个回答

2

这里的信息帮助我让我的Android应用程序与Kerberos正常工作。这是我正在开发的一个项目链接,它实现了Kerberos身份验证。以下是相关代码:

UsernamePasswordCredentials creds =
  new UsernamePasswordCredentials(username, password);
DefaultHttpClient client = getHttpClient();
client.getCredentialsProvider().setCredentials(SERVER_AUTH_SCOPE, creds);

boolean authWorked = false;
try{
  HttpGet get = new HttpGet(AUTH_URI);
  HttpResponse resp = client.execute(get);
  authWorked = hasValidCookie();
}
/*catch(AuthenticationException e){
Log.e("TAG", "Auth exceptions");
//TODO maybe do something?
}*/
catch(IOException e){
  Log.e("TAG", "IOException exceptions");
  //TODO maybe do something?
}

这里是getHttpClient()方法:

  public static DefaultHttpClient getHttpClient(){
    if(httpClient == null){
      httpClient = new DefaultHttpClient();
      final HttpParams params = httpClient.getParams();
      HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
      HttpConnectionParams.setSoTimeout(params, REGISTRATION_TIMEOUT);
      ConnManagerParams.setTimeout(params, REGISTRATION_TIMEOUT);
    }
    return httpClient;
  }

这是 hasValidCookie() 函数

private static final String LOGIN_COOKIE_NAME = "CGISESSID";
private static boolean hasValidCookie(){
  for(Cookie cookie: getHttpClient().getCookieStore().getCookies()){
    if(cookie.getName().equals(LOGIN_COOKIE_NAME))
    {
      return true;
    }
  }
  return false;
}

非常有趣。但是你的Github示例链接已经失效了。我也在尝试在Android上实现Kerberos,这似乎是一个相当艰巨的任务。 - SMBiggs

1

有一个名为Hypergate(hypergate.com)的应用程序,它是Android上的Kerberos客户端,允许其他应用程序请求票证。它使用标准的Android API,这意味着WebView和大多数浏览器无需进行任何代码更改即可工作。还有一个SDK可以轻松集成,将为您管理票证。

声明:我是Hypergate的一名工程师。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接