內容摘要
前言
1.伺服器端
2.Android用戶端
3.IIS部署
4.運行效果
在Android移動項目開發中,訪問伺服器時,為了簡潔方便,我們經常使用http協議來傳遞JSON格式的資料。然而有些項目需要有一定的安全性,如使用Android用戶端登陸到MIS系統。雖然我們是通過Android手機用戶端的登陸Activity中登陸到系統的,但是略懂電腦的駭客是能夠跳過登陸Activity,從而直接進入系統的。這樣,會造成一些由於系統的不安全所帶來的麻煩。建立一種防止駭客強行登入的身分識別驗證模式尤為重要。此時,系統的身分識別驗證成為阻擋駭客登陸的一道屏障。那麼,怎樣實現一個身分識別驗證呢?讓我們以IIS為宿主,一步一步的實現身分識別驗證吧。
一、ASP.NET伺服器端
首先,我們使用VS2010建立一個web項目(可以是WebForms,也可以是MVC,我這裡使用的是ASP.NET MVC項目)。圖1.1所示
圖1.1
然後,在HomeController的Index Action中輸入:登陸成功。
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return Content("登陸成功");
}
}
二、Android用戶端
首先,建立一個Android項目,並建立一個MainActivity類。
接著,編寫一個訪問IIS伺服器的類。
package ld.com.authorize;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;
import android.util.Log;
public abstract class HttpHelper {
private final static String TAG = "HttpHelper";
public static String invoke() {
String result = null;
try {
final String url = "http://192.168.1.104:180/";
HttpPost httpPost = new HttpPost(url);
DefaultHttpClient httpClient = new DefaultHttpClient();
//基本驗證
BasicCredentialsProvider bcp = new BasicCredentialsProvider();
String userName = "liudong";
String password = "123";
bcp.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(
userName, password));
httpClient.setCredentialsProvider(bcp);
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(
httpResponse.getEntity().getContent()));
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
builder.append(s);
}
result = builder.toString();
Log.d(TAG, "result is ( " + result + " )");
} catch (Exception e) {
Log.e(TAG, e.toString());
}
Log.d(TAG, "over");
return result;
}
}
注意的是,我這裡使用者名稱和密碼分別是:liudong和123。
然後,修改layout檔案:main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<Button android:text="身份碼驗證" android:id="@+id/btnPassword"
android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
</LinearLayout>
最後,修改MainActivity。
package ld.com.authorize;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private final String TAG = this.getClass().getSimpleName();
private Button btnPassword;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnPassword = (Button) this.findViewById(R.id.btnPassword);
setInvokeOnClick();
}
private void setInvokeOnClick() {
btnPassword.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
private ProgressDialog progressDialog;
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
// super.onPostExecute(result);
progressDialog.cancel();
Toast.makeText(MainActivity.this, result,
Toast.LENGTH_SHORT).show();
Log.d(TAG, result);
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog
.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setTitle("調用中,請稍後...");
progressDialog.show();
}
@Override
protected String doInBackground(Void... arg0) {
// TODO Auto-generated method stub
try {
return HttpHelper.invoke();
} catch (Exception e) {
return null;
}
}
};
task.execute();
}
});
}
}
設定存取權限為:<uses-permission android:name="android.permission.INTERNET" />
運行模擬器的效果2.1所示。
圖2.1
三、IIS部署
首先、添加一個網站,3.1所示。
3.1
接著,在進入電腦管理-->本機使用者和組-->使用者,建立一個使用者,3.2所示。
圖3.2
然後,設定IIS的身分識別驗證(圖3.3所示)。
圖3.3
設定其身分識別驗證模式為:基本驗證或Window身份s驗證(圖3.4所示)。
圖3.4
最後,我們在瀏覽器中輸入網址進行驗證,驗證結果見圖3.5和圖3.6。
圖3.5
圖3.6
我們可以發現,瀏覽該網頁時需要使用者名稱和密碼。我們輸入了正確的使用者名稱和密碼後就可以登入這個頁面了。
四,運行效果。
見圖4.1和圖4.2所示。
圖4.1
圖4.2
代碼下載
出處:http://www.cnblogs.com/GoodHelper/archive/2011/08/17/android_iis_01.html
作者:劉冬.NET
歡迎轉載,但須保留著作權。