android – rails设计http验证移动设备

我正在尝试在使用Devise gem的rails app上验证我的服务器
ruby
android客户端应用程序.但我已经尝试了http身份验证,并发布了身份验证请求,服务器只响应任何给定的用户名/密码200.

我已经在用户模型中设置了config.http_authenticatable = true和:database_authenticable …

我会发布我的身份验证方法,所以你们可以看看它…

public static boolean authenticate(User user, String verb) throws IOException, JSONException
{

    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(verb);

     CredentialsProvider credProvider = new BasicCredentialsProvider();
     credProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
            new UsernamePasswordCredentials(user.getMail(), user.getPassword()));

    httpClient.setCredentialsProvider(credProvider);

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
    nameValuePairs.add(new BasicNameValuePair("email", user.getMail()));  
    nameValuePairs.add(new BasicNameValuePair("password", user.getPassword()));  
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    HttpResponse httpResponse = httpClient.execute(httpPost);


    int statusCode = httpResponse.getStatusLine().getStatusCode();
    //JSONObject resp = null;

     if (statusCode < 200 || statusCode >= 300){
        throw new IOException("Error");
     }


    return true;
}

最佳答案 如果服务器响应200,它听起来真的像服务器端配置,所以你应该仔细检查你的URL实际上是安全的,使用桌面Web浏览器和像Fiddler这样的工具,这样你就可以看到一切.特别注意身份验证标头和状态代码;至少你应该从服务器上看到一个401来启动它.

您还可以在设备上打开Apache HTTP的诊断程序,它还会将标题和内容转储到LOGCAT,这样您就可以确保一切正在进行中.

检查WWW-Autnenticate标头的内容,它将指定接受哪些方案.客户端将重新请求URL,但它会将Authorization标头放入其请求中.

简而言之,在更容易排除故障的环境中,确保您的服务器端在应用程序之外工作.

客户端,看起来您只是激活BASIC身份验证(每个人都停止使用它!),您的端点可能只需要DIGEST或NTLM或KERBEROS或除BASIC之外的任何其他身份验证方案.由于看起来您没有为SSL设置,当然至少使用DIGEST或者您有明确的文本问题!

使用表单变量(用于身份验证)仅适用于应用程序级别,而不适用于HTTP协议级别,后者使用HTTP标头(WWW-自动验证,授权)和状态代码(401,403)进行身份验证过程.而且,如果您没有为仅SSL配置服务器(和客户端),则会出现明显的文本问题.

点赞