【輝郎】理解ASP.NET 2.0中的單點登入
Published: 16 Jan 2008
摘要
目錄
- 簡介
- 什麼是SSO?它是怎樣工作的?
- 系統條件
- 工作
- 下載
- 結論
- 簡介
通常在你要實現ASP.NET web應用程式的身份驗證時,你需要為你的每一個應用程式建立一個登入頁面。想象一下,如果你有兩個或者更多的互相關聯的web應用程式,你可能希望通過某種機制為你的所有帶關聯的應用程式實現僅出現一次登入頁面。這樣,一旦你登入了一次,你就可以瀏覽所有的關聯程式,而不再需要額外的登入了。單點登入(SSO)就是這樣的訪問控制機制,它允許一個使用者通過一次驗證就可以訪問所有軟體系統資源。
試想你在你的伺服器上建立了兩個或者更多的web站點。就像其他的web站點一樣,你只是使用ASP.NET許可權驗證機制來驗證你的使用者。那麼,你的這些站點可能需要一個或更多的登入頁面。現在你正試圖證明怎麼樣通過更改你的配置來實現跨程式登入。換句話說,我們只想給我們的程式配置一個登入頁面,並且一旦使用者通過了驗證,他就可以瀏覽其他所有的站點,而不需要另外的登入。在這篇文章的附錄中,你也可以看到如何加密你的配置檔案。
什麼是單點登入?它是怎樣工作的?
在許多的公司裡,他們有一些以web站點或web應用程式為表現層的系統。自然,由於安全議題他們將需要通過基於ASP.NET 2.0,通過Membership Provider 和 Role Provider 或者定製實現許可權驗證和許可權驗證系統。不論怎樣,所有的站點都會預設有一個確定使用者的ID和密碼在資料庫中是否有效的”login.aspx” web窗體.當你只有一個站點或者這些站點都是獨立執行時,這樣做是沒有問題的。但是當你有兩個或多個站點,而且站點間是關聯在一起或連結在一起的,你沒準就會問:為什麼每個應用程式你都必須登入一次?為什麼你不可以只有一個”login.aspx”來實現驗證,並讓所有不關聯程式真正統一起來。幸運的是,在ASP.NET 2.0中你可以通過同樣的配置來實現跨應用程式訪問,不論是你的新的站點還是已經存在的站點。
在ASP.NET配置檔案(web.config)中有一個配置節(在
由於
系統條件
· A web server running on Windows 2000 or later
· .NET Framework 2.0
· Visual Studio 2005
· Microsoft SQL Server 2005 Express Edition
現在讓我們來看看在我們的專案中發生了什麼。我有一個站點(Aspalliance1)站點中包含一個登入頁面”Login.aspx”.使用者可以通過此頁來進行許可權驗證。在這個站點裡還有一個頁面叫做”Default.aspx”,它有一個header和一些文字另外還有一個到Aspalliance2站點的連結。你將會看到一旦這個使用者登入了,他可以導航到其他站點而不需要第二次登陸。這裡還有一個安置有兩個加密和解密的按鈕的頁面”Encryption.aspx”,用來加密和解密配置檔案。
就像我之前所說的那樣,你可以通過在你的web配置檔案中一點點小小的配置實現跨應用程式訪問。在web.config檔案中,有一個名為
清單 1: 配置web.config中的machineKey
<machineKey
validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF
21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141"
decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099"
validation="SHA1"/>
這個樣例程式碼並沒有被加密,並且它不會被髮布到伺服器上。因為處於安全考慮,釋出到伺服器的
清單 2: web.config 中加密後的machineKey
<machineKeyconfigProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedDataType="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfoxmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKeyxmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfoxmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa KeyKeyName>
KeyInfo>
<CipherData>
<CipherValue>
lm3mfPX/94Zm3HgdbsmKiIxbrWM14t3/ugxs40BFOAHbIaCtwQ3gVQusFtOFVUoNVny01kgBCeh10rVEId
djNZ/8luBNoCbHm8OLjgPLHVrT+G0c/LRpESJk2ni/Jy2sWKXlgejgSQ1W5NE53GZtG3s9hu+nk4OWxntS
6z3v7AM=
CipherValue>
CipherData>
EncryptedKey>
KeyInfo>
<CipherData>
<CipherValue>
BCEGUV/dh1Imbcm5vn0Kn8NrD+EX+KemenR7x+VekwT1ZO6y5+jRyF4RDWMJCfJ1jHC36+MAfCdHuXN0rP
B6hu5YUtX9VA5q5N0NGrs9AIpG+0ihuuS3HDzQe3P6nlI30m1h0pmL1yJBovY0i6fbCA6++GT2MdwCLERk
+PVWmoq7p1q97n5pNzNqhVKCX45lhS5ySVS+MjJXVeTrcatftpvaUcjLsNcL2kMerzf5w/SU3AbLEuY04w
dgYWX5tWzxqeUcghdlWLD0tQi8qyyfVfzXPYozR5sspWHdgqmAycrACHN2dcONWPjT4BanRWb1ouKuP8K+
0CEFE/Hj2ChpYw==
CipherValue>
CipherData>
EncryptedData>
machineKey>
你可以通過Configuration、SectionInformation兩個類來加密你的配置檔案。為了加密和解密你的
清單 3:web配置檔案的加密程式碼
protected void btnEncrypt_Click(object sender, EventArgs e)
{
try
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(
"/Aspalliance1 ");
ConfigurationSection machineKeySection = config.GetSection(
"system.web/machineKey");
machineKeySection.SectionInformation.ProtectSection(
"RSAProtectedConfigurationProvider");
machineKeySection.SectionInformation.ForceSave = true;
config.Save();
Response.Write("Encryption Succeed
");
}
catch (Exception ex)
{
Response.Write("Error while encrypting
");
Response.Write(ex.Message);
}
}
清單 4: web配置檔案的解密程式碼
protected void btnDecrypt_Click(object sender, EventArgs e)
{
try
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(
"/Aspalliance1 ");
ConfigurationSection machineKeySection = config.GetSection(
"system.web/machineKey");
machineKeySection.SectionInformation.UnprotectSection();
machineKeySection.SectionInformation.ForceSave = true;
config.Save();
Response.Write("Decryption Succeed
");
}
catch (Exception ex)
{
Response.Write("Error while decrypting
");
Response.Write(ex.Message);
}
}
現在你必須在這個站點中設定相同的配置。首先你需要更改你的窗體驗證部分的loginUrl,這個窗體將被用來將匿名使用者跳轉到”Login.aspx”頁。只是,現在它將把使用者重定向到Aspalliance1站點中的”Login.aspx”頁。
清單 5: 設定 web.config中的驗證節
<authentication mode="Forms">
<forms loginUrl="http://localhost/Aspalliance1/login.aspx"name=".ASPXAUTH"/>
authentication>
如果你想實現跨程式登入你的好多站點時,最重要的一點就是你必須把你的兩個或更多的站點配置為相同的
清單 6: 設定web.config 中的 machineKey
<machineKey
validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF
21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141"
decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099"
validation="SHA1"/>
[下載]
測試這個站點的話,可以使用使用者名稱:Admin密碼:123456&來登入。
這個下載附件中有一個VS 2005專案,其中包含有兩個站點:aspalliance1 and aspalliance2.
要安裝這個例項的話,你需要建立兩個IIS虛擬目錄命名為:aspalliance1 和 aspalliance2,並將地址指向相應的資料夾。你也可以通過Visual Studio 2005開啟站點。
當使用者要交叉訪問你的多個站點時,他必須重複登陸實在是麻煩。所以,如果只讓使用者登入一次,那會是非常棒的。實現這些,你只需要給你的"web.config" 檔案增加具有相同值的
文章末尾附上部落格堂大俠寶玉的評論文章:對《Understanding Single Sign-On in ASP.NET 2.0》一文的補充
在這篇文章中,Masoud討論了應用ASP.NET中統一身份驗證模型進行跨應用程式驗證的問題,包括:Membership Providers, web.config配置,配置檔案的加密解密等。在文章的最後,作者提供了通過ASP.NET login controls來驗證的程式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-332661/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【輝郎】ASP.NET MVC深度接觸:ASP.NET MVC請求生命週期ASP.NETMVC
- 單點登入原理
- 跨域分散式系統單點登入的實現(CAS單點登入)跨域分散式
- 對SSO單點登入和OAuth2.0的區別和理解OAuth
- 初探單點登入 SSO
- java實現簡單的單點登入Java
- CAS單點登入-簡介
- SSO單點登入邏輯
- 單點登入 SSO 的實現原理
- 如果快速理解及實現單點登入及分散式回話分散式
- 前端關於單點登入的知識前端
- 單點登入的三種實現方式
- 解決單點登入的一個方法!
- 單點登入原理與簡單實現
- CAS單點登入-基礎搭建
- CAS單點登入-https配置HTTP
- 使用CAS實現單點登入
- MVC - 單點登入中介軟體MVC
- 【大前端】認識單點登入前端
- ASP.NET Core 中簡單Session登入校驗ASP.NETSession
- 一圖搞懂Web應用的單點登入Web
- vue實現單點登入的N種方式Vue
- CAS單點登入(SSO)實戰(一)
- Casdoor + OAuth 實現單點登入 SSOOAuth
- CAS SSO單點登入框架學習框架
- 八幅漫畫理解使用JSON Web Token設計單點登入系統JSONWeb
- 利用Redis單點登入跨伺服器的方法Redis伺服器
- 實戰模擬│單點登入 SSO 的實現
- 談談SSO單點登入的設計實現
- OAuth2實現單點登入SSOOAuth
- Spring Security OAuth2 單點登入SpringOAuth
- 【SSO】--單點登入之過濾器(filter)過濾器Filter
- 22 CAS實現單點登入體驗
- 採用 CAS 原理構建單點登入
- 將單點登入擴充套件到雲套件
- 什麼是單點登入?如何實現?
- ASP.NET登入驗證ASP.NET
- ASP.NET Core Authentication系列(四)基於Cookie實現多應用間單點登入(SSO)ASP.NETCookie