国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET Authentication Provider

2024-07-10 12:55:41
字體:
供稿:網(wǎng)友


收集最實用的網(wǎng)頁特效代碼!

asp.net 提供了一些新型的authentication 和 authorization 方案,對于開發(fā)人員來說這將是和以前不同的一種方式??上驳氖莂sp.net提供的方案多樣更加靈活;可惜的是這種方案是基于iis的。我知道,有些人并不喜歡iis,認(rèn)為它容易受攻擊。只是一直不喜歡asp的方式,雜亂的html標(biāo)記中夾雜著代碼,難于維護也難于調(diào)試?,F(xiàn)在有了新的解決方案,讓我們看看。
  
  新型asp.net authentication provider(下面我會用asp.net ap來簡稱)僅僅發(fā)生在調(diào)用asp.net引擎執(zhí)行.aspx文件時發(fā)生,這也意味著當(dāng)調(diào)用.asp文件時將不會調(diào)用asp.net引擎。所有的authentication選項被放在一個xml文件中。每當(dāng)你創(chuàng)建一個asp.net的project時,你可以在project目錄下發(fā)現(xiàn)一個config.web文件,在這個xml文件的<security>, <authentication>, <authorization>等標(biāo)記中你可以進行設(shè)置和控制。默認(rèn)的是:<authentication mode="none" />,這意味著asp.net將不使用任何的authentication provider,那么這種模式下,asp.net的底層實現(xiàn)和原來的asp和iis 4/5 將完全相同。
  
  
  
  一個典型的config.web的一般會是下面這樣的:
  
  <!-- authentication
  
   this section sets the authentication policies of the application. possible modes are "windows", "forms", "passport" and "none"
  
  -->
  
  <authentication mode="none" />
  
  我們會逐一的考察<authentication>中各個可能的值,不過作為一個開放人員最后我的重點會放在”forms”上,最后確定一下我們的平臺環(huán)境:w2k adv , vs.net rcx , ie 6 。(vs.net beta2 應(yīng)該也是可以的,因為寫這篇文章時我的系統(tǒng)已從beta 2上升級了,所以只能說:我想beta 2也是可以的。不過我們不會討論mode=”cookie”的情況,這個標(biāo)記只發(fā)生在asp+的情況下,beta 2之后的asp.net中應(yīng)當(dāng)沒有了),然后我們還會使用到sdk中帶的例子,因為簡單所以可以是最好的一個起點。
  
   然后我們需要簡單的設(shè)置一下子,先建立一個目錄c:/inetpub/wwwroot/security,然后copy原來sdk的frameworksdk/samples/quickstart/aspplus/samples/security中的文件到新建的目錄中(也可以直接解壓縮附帶文件到這個目錄中)
  
  
  
  1. mode=”none”
  
  
  
  這種模式是默認(rèn)的,像上面提到的那樣,它的行為和原來的asp沒有任何的不同。
  
  但你使用vs.net生成一個asp.net 的project時,這種模式是默認(rèn)生成的。
  
  
  
  2. mode=”windows”
  
  
  
  這種模式下,我們所訪問的每一個頁面都將需要通過系統(tǒng)的authentication,訪問者可能看到有些迷惑和windows環(huán)境下特有的authentication窗口 ,老實說我更喜歡看到 window xp下的,它更可愛一些。使用這種模式意味著你可以不用額外的寫任何代碼,很快的實現(xiàn),但我想你的商業(yè)用戶不會喜歡它,而且作為一個開發(fā)人員,你無法定制它。
  
  現(xiàn)在你實現(xiàn)這種方式將會非常的簡單。
  
  1. 在config.web 文件中設(shè)置<authentication mode="windows" />
  
  2. 去iis的控制管理界面設(shè)置你的application屬性就可以了。如下圖:
  
  3. 然后訪問你的頁面,你會看到這個對話框,很有趣但絕對讓非專業(yè)人士迷惑。
  
  4. 我們使用的是windowauth的頁面。注意mode=” windows”,還沒有先進到只用設(shè)置好mode=就可以實現(xiàn)windows authentication了。
  
  
  
  
  
  
  
  
  結(jié)果如圖:
  
  
  
  
  
  
  
  
  3. mode=”passport”
  
  
  
  對于這種模式下,asp.net引擎會使用microsoft passport的authentication機制,理論上這種模式將是最ok和省力的,不過照目前看來,想在asp.net下實現(xiàn)passport還不是一件輕松的事情,vs.net beta 2的類庫并沒有完全實現(xiàn)passport 2.1的功能(passportidentity). microsoft目前唯一展示的是在msdn上的coldstorage例子,實現(xiàn)上基本基于passport 1.4而且像使用directx 一樣,還需要專門的一個dll。有資料顯示vs.net rc2之后的類庫已經(jīng)實現(xiàn)了原來未實現(xiàn)的功能,但就目前看來缺少這方面的資料,所以把這方面的信息留給microsoft和passport 3.0吧,以后的時間我們會再來考察,對于passport我深有信心,而且只要在microsoft平臺,我們都可能無法逃避面對passport.
  
  有關(guān)coldstorage的passport的信息,可以參見下面的文章:
  
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncold/html/storageauthentication.asp
  
  
  
  4. mode=”forms”
  
  
  
  這種模式下,我想每個開放人員將獲得最大的靈活性和控制,而且從現(xiàn)在看來,這是最實用和可行的一種方式。先看一個比較簡單的例子:
  
  1. 在config.web 文件中進行下面的設(shè)置:
  
  <authentication mode="forms">
  
  <forms name=".aspxuserdemo" loginurl="login.aspx" />
  
  </authentication>
  
  loginurl=”string” 表明未通過authentication的請求將被定向到的頁面,你可以自行設(shè)置。
  
  2. 然后點擊或在login.aspx 文件的login按鈕的click的事件處理程序中寫入下面的代碼:
  
  void login_click(object sender, eventargs e) {
  
  
  
  // authenticate user: this samples accepts only one user with
  
  // a name of [email protected] and a password of 'ccboy'
  
  
  
  if ((useremail.value == "[email protected]") && (userpass.value == "ccboy")) {
  
  formsauthentication.redirectfromloginpage(useremail.value, persistcookie.checked);
  
  }
  
  else {
  
  msg.text = "invalid credentials: please try again";
  
  }
  
  }
  
  
  
  這里我們使用的硬編碼,目前只允許[email protected] 和 ccboy作為登錄的用戶。測試時我們并不直接訪問login.aspx而是請求default.aspx這個頁面,asp.net使用其authentication機制,將重新定向到login.aspx,當(dāng)用戶輸入的信息被接受則返回最初請求的default.aspx.方式上由于我們使用dotnet的webui控件,更加對象化了,當(dāng)判斷通過formsauthentication 執(zhí)行redirectfromloginpage 方法,這個函數(shù)發(fā)出cookie,并把用戶重新定向到最初請求的資源。這種方式下asp.net ap做了一半的工作,事實上它是被動的完成redirectfromloginpage
  
  結(jié)果如圖:
  
  
  
  
  
  
  
  
  下面我們修改config.web文件,使得authentication 從config.web中獲得信息和發(fā)生
  
  1. 先設(shè)置config.web 文件
  
  <authentication mode="forms">
  
  <forms name=".aspxuserdemo" loginurl="login.aspx" >
  
   <credentials passwordformat="clear">
  
   <user name="[email protected]" password="ccboy"/>
  
   </credentials>
  
  </forms>
  
  </authentication>
  
  <credentials></credentials>中指定訪問系統(tǒng)資源的用戶名和密碼,并且可以對加密的密碼進行定制和管理(建議實際應(yīng)用中不要將用戶名和密碼放在這里面)
  
  passwordformat可以是“clear”、“sha1”、“md5”等值。
  
  clear:用純文本保存密碼。用戶和密碼不需要進一步的轉(zhuǎn)換可以直接使用和用戶進行比較
  
  sha1:用sha1的哈希分類保存密碼。驗證時將用sha1算法對用戶密碼進行散列,然后同該值進行比較。
  
  md5:同sha1類似,只是使用不同的算法。
  
  當(dāng)使用sha1和md5時還需要一個專門的api(hashpasswordforstoringinconfigfile)來執(zhí)行加密,然后結(jié)果因保存到config.web文件中。具體可以參考下面的鏈接:
  
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconformsauthenticationutilities.asp
  
  
  
  2. 然后點擊或在login.aspx 文件的login按鈕的click的事件處理程序中寫入下面的代碼:
  
   void login_click(object sender, eventargs e) {
  
  
  
  if ( formsauthentication.authenticate( useremail.value, userpass.value) )
  
  {
  
   formsauthentication.redirectfromloginpage(useremail.value, persistcookie.checked);
  
   }
  
   else {
  
   msg.text = "invalid credentials: please try again";
  
   }
  
   }
  
   結(jié)果和上一個相同,但這次我們把判斷交給了asp.net ap ,我們只傳遞了useremail,userpass兩個參數(shù),authenticate方法將完成authentication過程,這個用戶將和我們在config.web中<user></user>中設(shè)置的相同。
  
  
  
  
  
  
  
  
   ms文檔《forms authentication using an xml users file》展示了另外一種獲取用戶名和密碼的方式,這種方式為了安全,用戶和密碼被放在一個單獨的xml文件中。具體參考下面的鏈接:
  
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconformsauthenticationutilities.asp
  
  同樣的道理你可以象你以前做得一樣將用戶和密碼放到數(shù)據(jù)庫表中,比如:
  
   void login_click(object sender, eventargs e) {
  
   if(page.isvalid)
  
   {
  
   sqldatareader dr;
  
  
  
   // connect to the database
  
   sqlconnection cn = new sqlconnection("server=localhost;
  
   uid=mypassport;pwd=123;database=clientpassword;");
  
  cn.open();
  
   // create a command to get the question
  
   sqlcommand cmdquestion = new sqlcommand("select password;
  
   from users where email = '" + useremail.value + "'", cn);
  
  
  
   cmdquestion.execute(out dr);
  
   if(dr.read())
  
   if(dr["password"].tostring() == userpass.value)
  
   formsauthentication.redirectfromloginpage(useremail.value, persistcookie.checked);
  
   else
  
   msg.text = "invalid password. please try again ";
  
   else
  
   msg.text = "email address not found.";
  
   }
  
   }
  
  
  
   再同理可以推到這個過程也還可以是調(diào)用帶有商業(yè)邏輯 .net 組件來完成,也可以是調(diào)用另外一個web services來完成,當(dāng)從這個角度來說,已經(jīng)和ms passport 有些相同了。相比起來microsoft的方式是重量級的。 
     
  5. mode=”mymode” 
      
   這將是以后我們要討論的,asp.net 支持我們使用自己的ap來實現(xiàn)authentication 和 authorization 方案.這將是一種更高級的方式,事實上asp.net 比上一個版本更加的靈活和多樣的選擇。keith brown在11,12月的msdn magazine上都有討論有關(guān)asp.net 的安全性問題。 
   
   
  綜上所述,我們可以看到一個基本的有關(guān)asp.net authentication的情況,其好處是明顯的,但如果你不喜歡iis其本身,那么你也將考慮使用其他的authentication方案。jeff kercher 的《asp .net 中的身份驗證:.net 安全性指導(dǎo)》將可以作為你開始和深入的一個更宏觀的執(zhí)導(dǎo)。
  
  http://www.microsoft.com/china/msdn/library/dnbda/html/authaspdotnet.asp
  
  這篇文章具體講述了各種驗證方案的環(huán)境和優(yōu)劣,從而協(xié)助你選擇和確定最佳的身份驗證方法。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌黎县| 洞口县| 施秉县| 澎湖县| 安远县| 抚顺市| 蒙阴县| 伊宁市| 丹棱县| 特克斯县| 临沂市| 英德市| 桑日县| 南皮县| 九寨沟县| 临海市| 河北省| 布尔津县| 洞口县| 冷水江市| 休宁县| 甘洛县| 肥东县| 中方县| 六盘水市| 岫岩| 额尔古纳市| 潮安县| 九寨沟县| 灵川县| 富锦市| 赤城县| 瓦房店市| 卢湾区| 鹤庆县| 长兴县| 定西市| 潞城市| 荃湾区| 阜平县| 丽水市|