簡體   English   中英

通過Kerberos使用Active Directory進行身份驗證

[英]Authenticating with Active Directory via Kerberos

我正在構建一個需要不同級別身份驗證的Android應用程序,我想使用Active Directory這樣做。

根據我的閱讀,使用Kerberos是微軟建議的方式。 我該如何為Android做這個? 我看到了javax.security.auth doc ,但它沒有告訴我太多。

我還看到某個地方Kerberos不包含用戶組 - 這是真的嗎? 在那種情況下,我是否必須以某種方式組合LDAP?

編輯

這里的主要目標是實現與活動目錄的LDAP連接,以便對企業Android應用程序進行身份驗證並為用戶提供正確的權限。 這里的真正障礙是Google將許多Java Web Services API從它的端口遺漏到了android。 (即javax.naming )此外,Android jar中的許多連接機制似乎只包含在遺留代碼中,實際上它們實際上什么都不做。

我在編寫代碼時使用我的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;
  }

為此,你可能最好只是完全呆在LDAP中,不要冒險進入kerberos。 Kerberos為您提供單點登錄的優勢,但由於您的Android應用程序沒有任何憑據,因此它並沒有真正幫助您。 我猜google有自己的理由不將javax.naming包含在發行版中。 這是非常重的東西。

您可以自己從Java運行時庫源中移植內容,或者最好使用本機LDAP庫。 例如這一個

請記住使用安全LDAP連接或至少是安全的身份驗證方法。 關於這的更多信息在這里

你看過使用JCIFS嗎? 基於這些問題[1] [2]本網站 ,JCIFS在Android下運行。 JCIFS站點有一個簡單的NTLM Authenticator示例 ,可以幫助您入門。 但是,根據此Samba列表消息 ,您將需要使用LDAP和自定義代碼來獲取用戶的組。

從Oracle學習教程。 我的代碼喜歡魅力。 希望一切都包含在Android的VM發行版中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM