ASP.NET 安全認證(四):Form 認證的補充

來源:互聯網
上載者:User
asp.net|安全

前三篇在 CSDN 論壇公布後,效果如同“神仙放屁——果然不同凡(反)響”。為感謝廣大網友的熱情與支援,這不,經過這一陣子的醞釀、修鍊,特意準備了這第四響。

之前我們講述的使用 Form 認證實現單點登入,正如網友所說的那樣,只能在同一網域名稱下使用。對於跨網域名稱的單點登入,除了使用 Passport 認證外,我們還是可以用 Form 認證的,只是要講究方法而已啦。正所謂“山不轉水轉,人不轉心轉”。

一、跨網域名稱的解決思路

在MSDN 2003 上搜尋索引鍵“Passport”,偶找到一篇“Passport 身分識別驗證提供者”。文章講述了 Passport 的認證原理,共 8 條,我就不多說了,大夥自個看吧。其中有一句話,引起偶的注意:“……響應在查詢字串中包含一個加密的 Passport Cookie……”。也正是此句才有了下面的思路。

所謂認證的通過與否,其實質就是檢測有無發放有效 Cookie ,使用 Form 也好,運用 Passport 也罷,都是 Cookie 在起作用。也就是說,我們只要把有效 Cookie 在登入後一次性發放給用戶端就得了。

二、跨網域名稱、跨伺服器的單點登入方法

1、  如何在本機類比跨網域名稱、跨伺服器的Single Sign On

只要瀏覽網址不同就相當於不同網域名稱,在本機至少有以下三種。它們雖然是同一項目,彼此卻不能共用 Session與 Cookie ,也就無法共用身分識別驗證票:

a). http://localhost/FormTest/Login.aspx

b). http://127.0.0.1/FormTest/Login.aspx

c). http://My_Computer_Name/FormTest/Login.aspx  //以電腦名稱瀏覽網站

d). http://192.168.0.8/FormTest/Login.aspx  //以網卡地址瀏覽網站

e). http://172.meibu.com/FormTest/Login.aspx  //擁有國際網域名稱

2、  在 ASP.NET 中如何提交給其它頁面

用過ViewState 的大概都知道,ViewState是儲存在用戶端的。不知大夥注意沒有,ASP.NET 為每張 .aspx 頁面都配備了獨自的 ViewState,且被解析後都是以一個 name=" __VIEWSTATE" 的隱藏控制項值來儲存ViewState。每次頁面提交,伺服器都會檢查該控制項的值有無被篡改,如此一來就註定 .aspx 只能提交給本頁。伺服器是死的,人是活的,我們不能被這些條條框框限定死了,我們要把程式寫成活的。

下面咱們從 http://localhost/FormTest/Login.aspx 輸入使用者名稱與密碼,然後提交給http://127.0.0.1/FormTest/Public/LoginTransfer.aspx 。Login.aspx與LoginTransfer.aspx都包含使用者名稱輸入框一個、密碼輸入框一個、登入按鈕一個。在 Login.aspx 頁面加入以下代碼:

this.Btn_Login.Attributes["onclick"]="SingleSignOn()"; //指定執行指令碼事件

在 Login.aspx 頁面上插入以下指令碼:

<script language="javascript">

         function SingleSignOn()

          {

//只能用指令碼改變指定 Form 提交的對象

document.getElementById("Form1").action="http://127.0.0.1/FormTest/Public/LoginTransfer.aspx?FromUrl="+window.location.href;

               //把隱藏控制項 __VIEWSTATE 中的值變更為 LoginTransfer.aspx 解析後出現的值,以實際看到的值為準

document.all.__VIEWSTATE.value = "dDwtMTkyODUzMTMyNzs7Pv1cp2RaxUcr5hGYf8ILX9/EMKy8";

       }

</script>

注意事項

         a).  LoginTransfer.aspx 出現的控制項及其 ID ,必須能夠在 Login.aspx 找到

         b). 控制項的 ID 必須一致,且能一一對應

c). 關於 __VIEWSTATE中的值,它與頁面控制項ID 無關,與瀏覽該頁面的網址無關,目前我只知道和控制項的數量、類型、名字空間(namespace FormTest.Public )以及存在的 ViewState有關係。大家在測試時,以直接瀏覽http://127.0.0.1/FormTest/Public/LoginTransfer.aspx 後,查看頁面源檔案所看到的值為準。

d). 提交後,將觸發並執行LoginTransfer.aspx 中的Btn_Login_Click 事件

[1] [2] [3] [4] 下一頁  



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.