Для этого у меня есть сервер 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 как имя пользователя и пароль и выполняет аутентификацию. На мой взгляд, кому-то легко получить доступ к этим данным и использовать его, как ему нравится. Есть ли лучший способ сделать это?
заранее спасибо
В службе RESTfull вы должны использовать заголовки заголовков HTTP/1.1, например:
request.addHeader("Authorization", "auth string");
Строка Auth может быть базовой строкой аутентификации: base64_encode(login+":"+password)
или токен аутентификации OAuth2 и т.д.
PS Ou bien использует SSL-соединения, как сказал Брайан Келли.
Да, для злоумышленника невероятно легко вывести имя пользователя/пароль из URL-адреса, используемого в простом HTTP-запросе. Ваша схема полностью уязвима для эксплуатации и атаки.
Вместо этого используйте HTTPS. Это заставит транспортное соединение быть зашифрованным в SSL и предотвратить отслеживание. Вы также должны удалить учетные данные из URL-адреса и вместо этого использовать что-то вроде Basic Authentication.