使用 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 身份验证?
ruby 使用rkerberos gem对使用Kerberos的用户进行身份验证,并将凭据存储在默认文件缓存中。不是