2010-08-25 54 views
11

我正尝试创建一个使用现有Web服务的Android应用程序。但是,现有的Web服务使用Kerberos进行身份验证,并且我无法使用android-xmlrpc库对服务进行身份验证。如果有人有这方面的经验,请回复。使用Kerberos进行Android验证

我对这种东西是全新的,所以任何建议将不胜感激!

谢谢, 戴夫

+0

这将是有益的,如果你描述的内容,_exactly_您的问题。你有什么尝试?你能给一些代码示例吗?您是否首先使用xmlrpc进行身份验证? ... – Fildor 2011-11-06 10:55:30

回答

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; 
}