Подтвердить что ты не робот

Аутентификация с помощью Active Directory через Kerberos

Я работаю над созданием приложения для Android, которое требует разных уровней аутентификации, и я хотел бы сделать это с помощью Active Directory.

Из того, что я прочитал, использование Kerberos - это способ, который предлагает Microsoft. Как это сделать для Android? Я вижу javax.security.auth doc, но это не говорит мне слишком много.

Я также заметил, что Kerberos не содержит групп пользователей - это правда? В этом случае мне нужно каким-то образом объединить LDAP?

EDIT

Основной целью здесь является получение LDAP-соединения с активным каталогом для аутентификации и предоставления пользователю правильных разрешений для корпоративного приложения Android. Настоящим барьером здесь является тот факт, что Google оставил многие API веб-служб Java от него до порта Android. (т.е. javax.naming). Кроме того, многие из механизмов соединения в банке Android, похоже, включены только в качестве устаревшего кода, и на самом деле они фактически ничего не делают.

4b9b3361

Ответ 1

Для этого вам может быть лучше просто оставаться полностью в LDAP и не рисковать в kerberos. Kerberos дает вам преимущество Single Sign On, но так как ваше приложение для Android не имеет никаких учетных данных, которые уже на вашем месте, это на самом деле вам не поможет. Я думаю, у Google были свои причины не включать javax.naming в дистрибутив. Это довольно тяжелый материал.

Возможно, вы сможете либо перенести материал из источников библиотеки среды java, либо, возможно, лучше использовать собственную библиотеку LDAP. Например, это один.

Не забудьте использовать безопасное соединение LDAP или, по крайней мере, безопасный метод проверки подлинности. Подробнее об этом здесь.

Ответ 2

Я нашел документацию здесь, чтобы быть действительно полезной, когда я писал свой код для аутентификации с моим сервером Kerberos. Здесь, как я аутентифицирую свой сервер kerberos, но вам может потребоваться настроить его для вашего (отсюда и я, включая ссылку):

public static final int REGISTRATION_TIMEOUT = 30 * 1000; // ms

private static DefaultHttpClient httpClient;

private static final AuthScope SERVER_AUTH_SCOPE =
    new AuthScope("urls to kerberos server", AuthScope.ANY_PORT);


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

  public static boolean authenticate(String username, String password)
  {

    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 = resp.getStatusLine().getStatusCode() != 403
    }
    catch(IOException e){
      Log.e("TAG", "IOException exceptions");
      //TODO maybe do something?
    }
    return authWorked;
  }

Ответ 3

Вы посмотрели на использование JCIFS? На основе этих вопросов [1] [2] и этот сайт, JCIFS работает под управлением Android. На сайте JCIFS есть простой пример NTLM Authenticator, который поможет вам начать работу. Однако, основываясь на этом сообщении в списке Samba, вам нужно будет использовать LDAP и настраиваемый код для получения групп пользователей.

Ответ 4

Попробуйте этот учебник от Oracle. Мой код любит очарование. Надеюсь, что все включено в дистрибутив Android VM.