繁体   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