自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET2.0中的單點(diǎn)登錄簡(jiǎn)介及實(shí)現(xiàn)

開發(fā) 后端
本文幫助大家理解ASP.NET2.0中的單點(diǎn)登錄。在文章的最后,作者提供了通過asp.net login controls來驗(yàn)證的程序。

在這篇文章中,Masoud討論了應(yīng)用asp.net中統(tǒng)一身份驗(yàn)證模型進(jìn)行跨應(yīng)用程序驗(yàn)證的問題,包括:Membership Providers, web.config配置,配置文件的加密解密等。在文章的最后,作者提供了通過asp.net login controls來驗(yàn)證的程序。

by Masoud Tabatabaei:

通常在你要實(shí)現(xiàn)asp.net web應(yīng)用程序的身份驗(yàn)證時(shí),你需要為你的每一個(gè)應(yīng)用程序創(chuàng)建一個(gè)登錄頁(yè)面。想象一下,如果你有兩個(gè)或者更多的互相關(guān)聯(lián)的web應(yīng)用程序,你可能希望通過某種機(jī)制為你的所有帶關(guān)聯(lián)的應(yīng)用程序?qū)崿F(xiàn)僅出現(xiàn)一次登錄頁(yè)面。這樣,一旦你登錄了一次,你就可以瀏覽所有的關(guān)聯(lián)程序,而不再需要額外的登錄了。單點(diǎn)登錄(SSO)就是這樣的訪問控制機(jī)制,它允許一個(gè)用戶通過一次驗(yàn)證就可以訪問所有軟件系統(tǒng)資源。

試想你在你的服務(wù)器上創(chuàng)建了兩個(gè)或者更多的web站點(diǎn)。就像其他的web站點(diǎn)一樣,你只是使用asp.net權(quán)限驗(yàn)證機(jī)制來驗(yàn)證你的用戶。那么,你的這些站點(diǎn)可能需要一個(gè)或更多的登錄頁(yè)面?,F(xiàn)在你正試圖證明怎么樣通過更改你的配置來實(shí)現(xiàn)跨程序登錄。換句話說,我們只想給我們的程序配置一個(gè)登錄頁(yè)面,并且一旦用戶通過了驗(yàn)證,他就可以瀏覽其他所有的站點(diǎn),而不需要另外的登錄。在這篇文章的附錄中,你也可以看到如何加密你的配置文件。

ASP.NET2.0中的單點(diǎn)登錄簡(jiǎn)介:什么是單點(diǎn)登錄?它是怎樣工作的?

在許多的公司里,他們有一些以web站點(diǎn)或web應(yīng)用程序?yàn)楸憩F(xiàn)層的系統(tǒng)。自然,由于安全議題他們將需要通過基于asp.net 2.0,通過Membership Provider 和 Role Provider 或者定制實(shí)現(xiàn)權(quán)限驗(yàn)證和權(quán)限驗(yàn)證系統(tǒng)。不論怎樣,所有的站點(diǎn)都會(huì)默認(rèn)有一個(gè)確定用戶的ID和密碼在數(shù)據(jù)庫(kù)中是否有效的”login.aspx” web窗體.當(dāng)你只有一個(gè)站點(diǎn)或者這些站點(diǎn)都是獨(dú)立運(yùn)行時(shí),這樣做是沒有問題的。但是當(dāng)你有兩個(gè)或多個(gè)站點(diǎn),而且站點(diǎn)間是關(guān)聯(lián)在一起或鏈接在一起的,你沒準(zhǔn)就會(huì)問:為什么每個(gè)應(yīng)用程序你都必須登錄一次?為什么你不可以只有一個(gè)”login.aspx”來實(shí)現(xiàn)驗(yàn)證,并讓所有不關(guān)聯(lián)程序真正統(tǒng)一起來。幸運(yùn)的是,在asp.net 2.0中你可以通過同樣的配置來實(shí)現(xiàn)跨應(yīng)用程序訪問,不論是你的新的站點(diǎn)還是已經(jīng)存在的站點(diǎn)。

在asp.net配置文件(web.config)中有一個(gè)配置節(jié)(在< system.web中)命名為< machineKey>,負(fù)責(zé)加密和解密窗體(這些窗體可以讀窗體權(quán)限驗(yàn)證cookies)權(quán)限認(rèn)證的cookie數(shù)據(jù)和view-state數(shù)據(jù),也負(fù)責(zé)校驗(yàn)進(jìn)程外(out-of-process)session 狀態(tài)標(biāo)識(shí)。所以當(dāng)用戶一旦被驗(yàn)證通過并且有一個(gè)cookie保存到了本地計(jì)算機(jī),其他擁有同樣< machineKey>配置的應(yīng)用程序也可以識(shí)別此cookie為有效的權(quán)限票據(jù)。所以在其他擁有同樣< machineKey>配置的應(yīng)用程序中就不再需要第二次登陸了。

由于< machineKey>信息是敏感的,你需要加密配置文件中的此節(jié)信息。為了實(shí)現(xiàn)這個(gè)目標(biāo),我將使用ConfigurationManager類和他的方法。這里還有一個(gè)類SectionInformation,包含有配置中單個(gè)配置節(jié)的元數(shù)據(jù)。此類中有個(gè)方法ProtectSection(),用來解密你的配置文件的配置節(jié)。

ASP.NET2.0中單點(diǎn)登錄配置:系統(tǒng)條件

·A web server running on Windows 2000 or later

·.NET Framework 2.0

·Visual Studio 2005

·Microsoft SQL Server 2005 Express Edition

現(xiàn)在讓我們來看看在我們的項(xiàng)目中發(fā)生了什么。我有一個(gè)站點(diǎn)(Aspalliance1)站點(diǎn)中包含一個(gè)登錄頁(yè)面”Login.aspx”.用戶可以通過此頁(yè)來進(jìn)行權(quán)限驗(yàn)證。在這個(gè)站點(diǎn)里還有一個(gè)頁(yè)面叫做”Default.aspx”,它有一個(gè)header和一些文本另外還有一個(gè)到Aspalliance2站點(diǎn)的鏈接。你將會(huì)看到一旦這個(gè)用戶登錄了,他可以導(dǎo)航到其他站點(diǎn)而不需要第二次登陸。這里還有一個(gè)安置有兩個(gè)加密和解密的按鈕的頁(yè)面”Encryption.aspx”,用來加密和解密配置文件。

就像我之前所說的那樣,你可以通過在你的web配置文件中一點(diǎn)點(diǎn)小小的配置實(shí)現(xiàn)跨應(yīng)用程序訪問。在web.config文件中,有一個(gè)名為< system.web>的配置節(jié)。我們將對(duì)< system.web>做相同的配置,只需要將配置節(jié)< machineKey>和它的值放到< system.web>配置節(jié)中。< machineKey>有一些屬性,我將要去配置他們。首先,就是指定用來驗(yàn)證的加密類型。validationKey 定義了用來驗(yàn)證解密數(shù)據(jù)的key,decryptionKey定義了用來加密和解密的數(shù)據(jù)的key,抑或是key生成的過程。

清單 1: 配置web.config中的machineKey

  1. < machineKey         
  2.  
  3. validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF  
  4.  
  5. 21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141"  
  6.  
  7. decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099"         
  8.  
  9. validation="SHA1"/>  

這個(gè)樣例代碼并沒有被加密,并且它不會(huì)被發(fā)布到服務(wù)器上。因?yàn)樘幱诎踩紤],發(fā)布到服務(wù)器的< machineKey>的加密是非常重要的。你可以在清單2中看到加密后的< machineKey>。

清單 2: web.config 中加密后的machineKey

  1. < machineKeyconfigProtectionProvider="RsaProtectedConfigurationProvider">  
  2.  
  3.       < EncryptedDataType="http://www.w3.org/2001/04/xmlenc#Element" 
  4.  
  5.         xmlns="http://www.w3.org/2001/04/xmlenc#">  
  6.  
  7.         < EncryptionMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />  
  8.  
  9.         < KeyInfoxmlns="http://www.w3.org/2000/09/xmldsig#">  
  10.  
  11.           < EncryptedKeyxmlns="http://www.w3.org/2001/04/xmlenc#">  
  12.  
  13.             < EncryptionMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />  
  14.  
  15.             < KeyInfoxmlns="http://www.w3.org/2000/09/xmldsig#">  
  16.  
  17.               < KeyName>Rsa Key< /KeyName>  
  18.  
  19.             < /KeyInfo>  
  20.  
  21.             < CipherData>  
  22.  
  23.               < CipherValue>  
  24.  
  25. lm3mfPX/94Zm3HgdbsmKiIxbrWM14t3/ugxs40BFOAHbIaCtwQ3gVQusFtOFVUoNVny01kgBCeh10rVEId  
  26.  
  27. djNZ/8luBNoCbHm8OLjgPLHVrT+G0c/LRpESJk2ni/Jy2sWKXlgejgSQ1W5NE53GZtG3s9hu+nk4OWxntS  
  28.  
  29. 6z3v7AM=  
  30.  
  31.               < /CipherValue>  
  32.  
  33.             < /CipherData>  
  34.  
  35.           < /EncryptedKey>  
  36.  
  37.         < /KeyInfo>  
  38.  
  39.         < CipherData>  
  40.  
  41.           < CipherValue>  
  42.  
  43. BCEGUV/dh1Imbcm5vn0Kn8NrD+EX+KemenR7x+VekwT1ZO6y5+jRyF4RDWMJCfJ1jHC36+MAfCdHuXN0rP  
  44.  
  45. B6hu5YUtX9VA5q5N0NGrs9AIpG+0ihuuS3HDzQe3P6nlI30m1h0pmL1yJBovY0i6fbCA6++GT2MdwCLERk  
  46.  
  47. +PVWmoq7p1q97n5pNzNqhVKCX45lhS5ySVS+MjJXVeTrcatftpvaUcjLsNcL2kMerzf5w/SU3AbLEuY04w  
  48.  
  49. dgYWX5tWzxqeUcghdlWLD0tQi8qyyfVfzXPYozR5sspWHdgqmAycrACHN2dcONWPjT4BanRWb1ouKuP8K+  
  50.  
  51. 0CEFE/Hj2ChpYw==  
  52.  
  53.           < /CipherValue>  
  54.  
  55.         < /CipherData>  
  56.  
  57.       < /EncryptedData>  
  58.  
  59. < /machineKey>  
  60.  

你可以通過Configuration、SectionInformation兩個(gè)類來加密你的配置文件。為了加密和解密你的< machineKey>讓我們來寫一些代碼吧。SectionInformation類有一個(gè)方法ProtectSection(),可以得到一個(gè)描繪Protection Provider的字符串比如"RSAProctedConfigurationProvider",并且加密這個(gè)配置節(jié)。這里還有一個(gè)Boolean類型的屬性ForceSave,當(dāng)需要配置類的save方法保存配置文件時(shí)需要將它設(shè)置為true。這里有"Encryption.aspx"頁(yè)面的代碼,頁(yè)面中包含有兩個(gè)按鈕來加密和解密配置文件。

清單 3:web配置文件的加密代碼

  1. protected void btnEncrypt_Click(object sender, EventArgs e)  
  2.  
  3. {  
  4.  
  5.   try 
  6.  
  7.   {  
  8.  
  9.     Configuration config = WebConfigurationManager.OpenWebConfiguration(  
  10.  
  11.       "/Aspalliance1 ");  
  12.  
  13.     ConfigurationSection machineKeySection = config.GetSection(  
  14.  
  15.       "system.web/machineKey");  
  16.  
  17.     machineKeySection.SectionInformation.ProtectSection(  
  18.  
  19.       "RSAProtectedConfigurationProvider");  
  20.  
  21.     machineKeySection.SectionInformation.ForceSave = true;  
  22.  
  23.     config.Save();  
  24.  
  25.     Response.Write("< h2 style='color:red'>Encryption Succeed< /h2>");  
  26.  
  27.   }  
  28.  
  29.   catch (Exception ex)  
  30.  
  31.   {  
  32.  
  33.     Response.Write("< h2 style='color:red'>Error while encrypting< /h2>< br/>");  
  34.  
  35.     Response.Write(ex.Message);  
  36.  
  37.   }  
  38.  
  39. }  
  40.  

清單 4: web配置文件的解密代碼

  1. protected void btnDecrypt_Click(object sender, EventArgs e)  
  2.  
  3. {  
  4.  
  5.   try 
  6.  
  7.   {  
  8.  
  9.     Configuration config = WebConfigurationManager.OpenWebConfiguration(  
  10.  
  11.       "/Aspalliance1 ");  
  12.  
  13.     ConfigurationSection machineKeySection = config.GetSection(  
  14.  
  15.       "system.web/machineKey");  
  16.  
  17.     machineKeySection.SectionInformation.UnprotectSection();  
  18.  
  19.     machineKeySection.SectionInformation.ForceSave = true;  
  20.  
  21.     config.Save();  
  22.  
  23.     Response.Write("< h2 style='color:red'>Decryption Succeed< /h2>");  
  24.  
  25.   }  
  26.  
  27.   catch (Exception ex)  
  28.  
  29.   {  
  30.  
  31.     Response.Write("< h2 style='color:red'>Error while decrypting< /h2>< br/>");  
  32.  
  33.     Response.Write(ex.Message);  
  34.  
  35.   }  
  36.  
  37. }  
  38.  

現(xiàn)在你必須在這個(gè)站點(diǎn)中設(shè)置相同的配置。首先你需要更改你的窗體驗(yàn)證部分的loginUrl,這個(gè)窗體將被用來將匿名用戶跳轉(zhuǎn)到”Login.aspx”頁(yè)。只是,現(xiàn)在它將把用戶重定向到Aspalliance1站點(diǎn)中的”Login.aspx”頁(yè)。

清單 5: 設(shè)置 web.config中的驗(yàn)證節(jié)

  1. < authentication mode="Forms">  
  2.  
  3. < forms loginUrl="http://localhost/Aspalliance1/login.aspx"name=".ASPXAUTH"/>  
  4.  
  5. < /authentication>  
  6.  

如果你想實(shí)現(xiàn)跨程序登錄你的好多站點(diǎn)時(shí),最重要的一點(diǎn)就是你必須把你的兩個(gè)或更多的站點(diǎn)配置為相同的< machineKey>。所以我只需要拷貝并粘貼Aspalliance1 站點(diǎn)中的< machineKey>配置節(jié)到Aspalliance2站點(diǎn)?,F(xiàn)在都已經(jīng)準(zhǔn)備好了,你可以測(cè)試你的站點(diǎn)了。

清單 6: 設(shè)置web.config 中的 machineKey

  1. < machineKey         
  2.  
  3. validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF  
  4.  
  5. 21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141"  
  6.  
  7. decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099"         
  8.  
  9. validation="SHA1"/>  
  10.  

[下載]

測(cè)試這個(gè)站點(diǎn)的話,可以使用用戶名:Admin密碼:123456&來登錄。

這個(gè)下載附件中有一個(gè)VS 2005項(xiàng)目,其中包含有兩個(gè)站點(diǎn):aspalliance1 and aspalliance2.

要安裝這個(gè)實(shí)例的話,你需要?jiǎng)?chuàng)建兩個(gè)IIS虛擬目錄命名為:aspalliance1 和 aspalliance2,并將地址指向相應(yīng)的文件夾。你也可以通過Visual Studio 2005打開站點(diǎn)。

當(dāng)用戶要交叉訪問你的多個(gè)站點(diǎn)時(shí),他必須重復(fù)登陸實(shí)在是麻煩。所以,如果只讓用戶登錄一次,那會(huì)是非常棒的。實(shí)現(xiàn)這些,你只需要給你的"web.config" 文件增加具有相同值的< machineKey>配置。并且處于安全考慮,我建議你加密這個(gè)配置節(jié)。這個(gè)加密方法在SectionInformation類中通過ProtectSection()方法被重寫了。以上便是ASP.NET2.0中單點(diǎn)登錄的實(shí)現(xiàn)方法。

【編輯推薦】

  1. ASP.NET表單身份驗(yàn)證的實(shí)現(xiàn)方法
  2. JQuery Form Ajax提交asp.net表單時(shí)失敗
  3. ASP.NET安裝部署問題總結(jié)
  4. 在APACHE上運(yùn)行ASP.NET經(jīng)驗(yàn)總結(jié)
  5. ASP.NET在線學(xué)習(xí)資源總匯
責(zé)任編輯:book05 來源: CSDN
相關(guān)推薦

2009-08-04 14:44:40

callback實(shí)現(xiàn)機(jī)ASP.NET2.0

2009-07-29 14:59:26

asp.net1.1ASP.NET2.0

2010-09-06 13:51:38

CSS失效CSS

2009-07-29 15:17:42

驗(yàn)證控件ASP.NET1.1ASP.NET2.0

2009-07-31 15:42:38

自定義providerASP.NET2.0

2009-08-07 16:18:08

ASP.NET2.0數(shù)

2010-06-02 16:49:24

MySQL存儲(chǔ)過程

2009-07-29 15:58:54

靜態(tài)文件處理ASP.NET

2009-07-29 11:29:16

ASP.NET1.1ASP.NET2.0

2009-07-29 15:06:16

asp.net1.1asp.net2.0

2009-12-14 10:03:16

ASP.NET 2.0

2009-12-14 17:50:45

ASP.NET 2.0

2009-07-21 15:34:32

ASP.NET 2.0

2009-08-05 17:43:48

ASP.NET 2.0

2010-06-23 15:44:03

ASP.NET MVC

2009-08-05 18:14:52

ASP.NET 2.0

2009-07-29 11:46:22

asp.net1.1

2009-07-23 16:28:20

URL映射ASP.NET 2.0

2009-07-22 17:28:07

CSS文件ASP.NET 2.0

2009-07-23 13:47:46

ASP.NET數(shù)據(jù)緩存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)