ASP.NET MVC 3でJSONPを利用してドメイン間でWEBシステムにログイン

14363 ワード

情報システムの開発に際しては,関連業務ロジックにより多系統間の相互登録が避けられない.一般的には、複数のシステム間で複数のユーザー名とパスワードを使用する必要があります.これにより、お客様は複数のシステム間でログインを繰り返す必要があります.ログインするたびにユーザー名とパスワードを入力する必要があります.最近流行っているのがOAuthです.新浪微博というオープンシステムはよくできています.しかしOAuthは本論文の議論の範疇ではない.ここでは主にjQuery 1について議論する.5 jsonpはAsp.NetMVC 3のアプリケーション.
この文書では、シーンを適用します.
あなたの開発チームがあるグループ会社のために情報管理システムを開発したいと仮定すると、現在最も重要な開発は受注システムと内部OAシステムです.この2つのシステムが同じデータベースを使用することを前提としています.ただ2つの異なるMVC 3.0 Webプロジェクト.つまり、同じIIS上に2つの仮想ディレクトリが配置されます.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>

MVC 3.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。