Я пытаюсь создать приложение для Android, которое использует существующий веб-сервис. Тем не менее, существующая веб-служба использует Kerberos для аутентификации, и у меня возникают проблемы с получением Android с помощью библиотеки android-xmlrpc для аутентификации с помощью службы. Если у кого-то есть опыт, ответьте.
Я совершенно новичок в таких вещах, поэтому любой совет будет очень благодарен!
Спасибо, Дэйв
Информация здесь помогла мне заставить мое приложение 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; }