在资源路径中编码身份验证数据是否正确

时间:2012-05-25 14:53:56

标签: android rest

我有一个RESTFull服务器和一个Android客户端。服务器有一些方法可以将数据返回给客户端的HTTP调用。客户端代码中的一种方法是下面显示的方法,我用它来验证客户。

        HttpClient httpclient = new DefaultHttpClient();
        HttpGet request = new HttpGet(
                "http://localhost:8080/myapp/customer/login/cUser/cpwd");

        request.addHeader("Accept", "text/plain");
        HttpResponse response = httpclient.execute(request);
        HttpEntity entity = response.getEntity();
        InputStream instream = entity.getContent();
        String msg = read(instream);


 if(msg.equals("success"){ // if customer logged in successfully
     //do something
 }

服务器端代码使用上述uri的一部分作为用户名和密码并进行身份验证。在我看来,有人可以很容易地访问这些数据并按照他/她的喜好使用它们。有没有更好的方法呢?

提前致谢

2 个答案:

答案 0 :(得分:1)

是的,攻击者从普通HTTP请求中使用的URL中提取用户名/密码非常容易。你的计划完全容易受到攻击和攻击。

请改用HTTPS。这将强制传输连接进行SSL加密并防止窥探。您还应该从网址中删除凭据,而是使用Basic Authentication之类的内容。

答案 1 :(得分:0)

在RESTfull服务中,您必须使用HTTP / 1.1 auth标头,例如:

request.addHeader("Authorization", "auth string");

Auth字符串可以是基本的身份验证字符串:base64_encode(login+":"+password)或OAuth2身份验证令牌等。

P.S。正如Brian Kelly所说,Ou bien使用SSL连接。