在ASP.NET MVC3 中利用JSONP跨域登入WEB系統

來源:互聯網
上載者:User

    在資訊系統開發的時,根據相關商務邏輯難免會多系統之間互相登入。一般情況下我們需要在多系統之間使用多個使用者名稱和密碼。這樣客戶就需要在多個系統之間重複登陸。每次登入都需要輸入使用者名稱和密碼。最近比較流行的就是OAuth。新浪微博這個開放系統做的就很好。但OAuth並非本文討論範疇。這裡主要討論jQuery1.5 jsonp 在Asp.net MVC3 中的應用。

    本文應用情境:

        假設您的Team Dev欲為某集團公司開發一整套資訊管理系統,目前首要開發的就是一套訂單系統和一套內部OA系統。前提是這兩套系統使用同一套資料庫。只是兩個不同的MVC3.0 Web項目。也就是說會在同一個IIS上部署兩個虛擬目錄。  我們的目標是在不使用WCF、WebService 等技術實現跨域登入。也就是說使用者用同一個帳號登入了訂單系統,那麼客戶就可以直接登入OA系統。而不需要在OA系統上再輸入一次使用者名稱和密碼。反之亦成立。

    jQuery1.5 JSONP 使用:

   <script type="text/javascript">
2 $(function () {
3 var oAUri = "@ViewBag.OAVRUri";
4 var user = "@ViewBag.User";
5 var pwd = "@ViewBag.PassWord";
6
7 $.ajax({
8 type: "GET",
9 url: String.format('{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?', oAUri, user, pwd),
10 cache: false,
11 error: function () {
12 alert("程式出錯,請聯絡管理員.");
13 },
14 dataType: "jsonp",
15 jsonp: 'callback',
16 success: function (result) {
17
18 }
19 });
20
21 });
22 </script>



   在MVC3.0中建立JSONP專用ActionResult

      代碼如下:

 1 public class JsonpResult<T> : ActionResult
2 {
3 public T Obj { get; set; }
4 public string CallbackName { get; set; }
5
6 public JsonpResult(T obj, string callback)
7 {
8 this.Obj = obj;
9 this.CallbackName = callback;
10 }
11
12 public override void ExecuteResult(ControllerContext context)
13 {
14 var js = new System.Web.Script.Serialization.JavaScriptSerializer();
15 var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";
16
17 context.HttpContext.Response.ContentType = "application/json";
18 context.HttpContext.Response.Write(jsonp);
19 }
20 }

JsonpResult 簡單調用如下:

 public ActionResult AppLogOn(string UserName, string PassWord, string callback)
{
return new JsonpResult<object>(new { success = true, rankName = rankName }, callback);
}

AppLogOn的action參數完全和上文中的jquery $.ajax 參數一致:

url: String.format('{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?', oAUri, user, pwd)

小結:
Jsonp的伺服器端的原理其實就是回調一個js函數名(這裡是callback參數)將該參數傳給服務端,接著再由伺服器端執行這個callback js函數,
同時附上該js函數的參數。比如上文的C#代碼:
var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";還有一點我們要注意的就是安全隱患問題:
在使用jsonp由於涉及到跨域,需要考慮到對方網站或者對方系統的安全性問題。應當避免安全隱患,不能濫用jsonp。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.