2010-08-25 20 views
11

ile doğrulanan Android Varolan bir web hizmetini kullanan bir Android uygulaması oluşturmaya çalışıyorum. Ancak, varolan web hizmeti kimlik doğrulaması için Kerberos'u kullanıyor ve Android ile hizmet almak için android-xmlrpc kütüphanesini kullanarak sorun yaşamaya başladım. Bu konuda herhangi bir deneyimi varsa, lütfen yanıt verin.Kerberos

Bu tür şeylerden tamamen yeniyim, bu nedenle herhangi bir öneri çok takdir edilecektir!

sayesinde Dave

+0

yararlı olacaktır bu. Ne denedin? Bazı Kod örnekleri verebilir misiniz? İlk etapta kimlik doğrulama olmadan xmlrpc'i mi kullandınız? ... – Fildor

cevap

2

information burada android app kerberos ile çalışan almak için bana yardımcı oldu. İşte üzerinde çalıştığım bir proje için bir link. Kerberos kimlik doğrulaması yapar. İşte ilgili kodu:

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

İşte getHttpClient() bir yöntem vardır: Eğer sorunun _exactly_ ne tarif eğer

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

Burada 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; 
} 
İlgili konular