我正在开发一个Android应用程序,它将使用SQL服务器(数据库)来存储应用程序的数据。此外,应用程序将使用ASP web API在客户端和服务器之间发送和接收XML或JSON。
我目前对如何使应用程序安全地进行身份验证以及如何保持用户登录而不需要在http请求中继续发送用户的凭据感到困惑。
因此,我需要您关于如何保护我的应用程序的建议,并在可能的情况下为我提供教程链接。
- 登录(用户名,密码在BasicNameValuePair)从您的客户端(这里是Android)通过访问Web API控制器(也许/令牌,如果你使用一些从Asp。. Net Web API网站)。如果成功,访问令牌将得到响应,您将保存在您的客户端(SharedPreference或数据库)
- 然后,只需发送访问令牌(不再需要用户名,密码)来请求其他API控制器。
当然,这里应该使用https来提高安全性。
获取访问令牌(登录阶段)的示例代码:public static Object getAccessToken(String address, String grant_type, String username, String password) throws Exception {
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("grant_type", grant_type));
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
// Making HTTP request
httpResponse = makeHTTPRequest(address, params);
if (httpResponse != null) {
statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK && statusCode != HttpStatus.SC_BAD_REQUEST) {
return httpResponse.getStatusLine().toString();
}
// Get JSON String (jsonString) from Input Stream (is)
getJSONFromInputStream();
if (jsonString.isEmpty()) {
return null;
}
// Parse the JSON String to a JSON Object
jObj = new JSONObject(jsonString);
}
// Return JSON Object
return jObj;
}
在makeHTTPRequest中,对于请求访问令牌:
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
httpPost.setEntity(new UrlEncodedFormEntity(parameters));
您的客户端可以使用同一帐户从多个设备访问吗?
----第一种情况(可以从多个设备访问):
1. 如果内部存在username或id,只需将它们发送到服务器。
2. 如果没有从客户端询问用户名和密码,则将其发送到服务器(或只是电话号码)
3.检查服务器上数据库的用户信息
4. 如果认证成功,将userid或username保存到内部存储中5. 如果失败,再问一遍。
----第二种情况(不能从多个设备访问):
您需要向服务器发送用户设备id,以检测您的用户登录了哪些设备。如果设备id匹配则认证成功,否则失败并要求用户重新登录。但在这种情况下,您需要小心,因为如果用户登录,从另一个设备登录后,第一个用户必须断开连接。因此,您应该为每个请求发送用户id和设备id,或者服务器向客户端发送断开连接查询。