我有一个用 php 编写的 android 和 web 服务。android 有一个身份验证系统,应用程序从该系统将“用户名”和“密码”发送到 web 服务,并将返回用户 ID。然后,我使用用户 ID 通过 Web 服务请求其他信息。
就良好实践而言,上述方法并不安全,我想到了使用会话。但我不知道如何使用它们?你们能给我一些让从android到网络服务的请求更安全的例子吗?
谢谢,
我有一个用 php 编写的 android 和 web 服务。android 有一个身份验证系统,应用程序从该系统将“用户名”和“密码”发送到 web 服务,并将返回用户 ID。然后,我使用用户 ID 通过 Web 服务请求其他信息。
就良好实践而言,上述方法并不安全,我想到了使用会话。但我不知道如何使用它们?你们能给我一些让从android到网络服务的请求更安全的例子吗?
谢谢,
您有两个主要选择:
1-SSL
在这种情况下与您的网络服务通信,您可以将用户名/密码作为纯文本发送,因为它们无论如何都会被加密
2-用服务器加密用户名/密码,public key
所以除了网络服务之外没有人(谁private key
可以解密消息)
如果您希望整个通信是安全的(不仅仅是发送用户名/密码),您可以使用symmetric cipher
算法(例如AES
),因为asymmetric cipher
算法(例如RSA
)要慢得多并且消耗更多资源。
此外,并不是说您需要将格式转换为public key
从DER
android 使用它,您可以使用openssl
你可以试试这个
如果您使用 HttpClient 进行发送,则可以将其存储在应用程序对象中并用于将来的请求
import android.app.Application;
import org.apache.http.impl.client.DefaultHttpClient;
public class AppObj extends Application
{
public static DefaultHttpClient davisimperialclient;
}
在您的登录屏幕中,您必须创建一个 HttpClient
AppObj.davisimperialclient = new DefaultHttpClient();
HttpPost localHttpPost = new HttpPost(ApplicationLinks.login);
try
{
ArrayList localArrayList = new ArrayList(2);
localArrayList.add(new BasicNameValuePair("username", this.name));
localArrayList.add(new BasicNameValuePair("password", this.pass));
localHttpPost.setEntity(new UrlEncodedFormEntity(localArrayList));
String str = EntityUtils.toString(DavisImperialApp.davisimperialclient.execute(localHttpPost).getEntity());
Log.e("error", str);
return str;
}
catch (Exception localException)
{
}
如果登录成功,您可以使用
AppObj.davisimperialclient
用于提出其他要求
该对象将一直存在,直到我们退出应用程序