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

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

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

谢谢, 戴夫

【问题讨论】:

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

标签: android kerberos xml-rpc


【解决方案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;这似乎相当令人生畏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2011-12-04
    相关资源
    最近更新 更多