Аутентификация с помощью Active Directory через Kerberos - PullRequest
11 голосов
/ 10 октября 2011

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

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

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

EDIT

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

Ответы [ 4 ]

3 голосов
/ 26 октября 2011

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

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

Только не забудьте использовать безопасное соединение LDAP или хотя бы безопасный метод аутентификации. Больше информации об этом здесь .

3 голосов
/ 26 октября 2011

Я нашел документацию здесь очень полезной, когда я писал свой код для аутентификации на моем сервере 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;
  }
2 голосов
/ 25 октября 2011

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

1 голос
/ 16 октября 2011

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

...