Android使用Kerberos进行身份验证

时间:2010-08-25 17:33:01

标签: android kerberos xml-rpc

我正在尝试创建一个使用现有Web服务的Android应用程序。但是,现有的Web服务使用Kerberos进行身份验证,我无法使用android-xmlrpc库来获取Android以对服务进行身份验证。如果有人对此有任何经验,请回复。

我对这类东西全新,所以任何建议都会非常感激!

谢谢, 戴夫

2 个答案:

答案 0 :(得分:2)

这里的information帮助我让我的Android应用程序与kerberos一起工作。这是我正在进行的项目的link。它执行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;
}

答案 1 :(得分:0)

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

免责声明:我是Hypergate的工程师