使用 Kerberos 进行 Android 身份验证

Posted

技术标签:

【中文标题】使用 Kerberos 进行 Android 身份验证【英文标题】:Android authenticating with Kerberos 【发布时间】:2011-04-03 21:00:46 【问题描述】:

我正在尝试创建一个使用现有网络服务的 android 应用程序。但是,现有的 Web 服务使用 Kerberos 进行身份验证,我无法使用 android-xmlrpc 库获取 Android 来使用该服务进行身份验证。如果有人对此有任何经验,请回复。

我对这种东西完全陌生,所以任何建议都将不胜感激!

谢谢, 戴夫

【问题讨论】:

如果您描述了确切您的问题是什么,那将会很有帮助。你试过什么?你能给出一些代码示例吗?您是否首先在没有身份验证的情况下使用 xmlrpc 进行了管理? ... 【参考方案1】:

Hypergate (hypergate.com) 是一个用于 Android 的 Kerberos 客户端,允许其他应用程序请求票证。它使用标准的 Android API,这意味着 WebView 和大多数浏览器无需任何代码更改即可工作。有一个 SDK 可以让您轻松集成,它会为您管理票证。

免责声明:我是 Hypergate 的工程师

【讨论】:

【参考方案2】:

这里的 information 帮助我让我的 android 应用程序与 kerberos 一起工作。这是我正在从事的项目的link。它执行 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;

【讨论】:

非常有趣。但是您的 github 示例的链接已失效。我也在尝试在 android 上实现 kerberos;这似乎相当令人生畏。

以上是关于使用 Kerberos 进行 Android 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Apache Kerberos 未从 Windows 客户端进行身份验证

如何让 Tomcat 中的 JNDIRealm 使用 Kerberos 身份验证?

SSL 和 Kerberos 身份验证之间的区别?

ruby 使用rkerberos gem对使用Kerberos的用户进行身份验证,并将凭据存储在默认文件缓存中。不是

使用 Kerberos 身份验证模拟用户时建立 ODBC 连接

OWIN Cookie 身份验证 - 使用 Kerberos 委派模拟 SQL Server