ASP.NET實(shí)現(xiàn)單點(diǎn)登陸(SSO)適用于多種情況
第一種:同主域但不同子域之間實(shí)現(xiàn)單點(diǎn)登陸
Form驗(yàn)證其實(shí)是基于身份cookie的驗(yàn)證。客戶登陸后,生成一個(gè)包含用戶身份信息(包含一個(gè)ticket)的cookie,這個(gè)cookie的名字就是在web.config里Authentication節(jié)form設(shè)定的name信息,如
<authentication mode="Forms">
<forms loginUrl="login.aspx" name=".ASPXAUTH" path="/" protection="All" domain=".zuowenjun.cn"></forms>
</authentication>
這里,.ASPNETAUTH就是這個(gè)Cookie的名字。通過在Request.Cookies集合里包含這個(gè)cookie,實(shí)現(xiàn)用戶身份信息的傳遞。所以,共享身份驗(yàn)證信息的思路很簡單:只要這個(gè)身份驗(yàn)證cookie能在自域名中共享,F(xiàn)orm驗(yàn)證信息自然可以共享!
代碼實(shí)現(xiàn):
string userData = JsonHelper.ScriptSerialize(user); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, user.userid.ToString(), DateTime.Now, DateTime.Now.AddHours(4), false, userData); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));//加密身份信息,保存至Cookie cookie.Domain = ".zuowenjun.cn"; Response.Cookies.Add(cookie);
第二種:虛擬目錄的主應(yīng)用和子應(yīng)用之間實(shí)現(xiàn)SSO
<authentication mode="Forms">
<forms name=".SSOAuth" protection="All" timeout="60" loginUrl="login.aspx" />
</authentication>
比較重要的兩個(gè)屬性是 name 和protection. 當(dāng) protection屬性設(shè)置為 "All",通過Hash值進(jìn)行加密和驗(yàn)證數(shù)據(jù)都存放在Cookie中.默認(rèn)的驗(yàn)證和加密使用的Key都存儲在machine.config文件,我們可以在應(yīng)用程序的Web.Config文件覆蓋這些值.默認(rèn)值如下:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey=" AutoGenerate,IsolateApps" validation="SHA1" />
IsolateApps表示為每個(gè)應(yīng)用程序生成不同的Key.我們不能使用這個(gè).為了能在多個(gè)應(yīng)用程序中使用相同的Key來加密解密cookie,我們可以移除IsolateApps 選項(xiàng)或者更好的方法是在所有需要實(shí)現(xiàn)SSO的應(yīng)用程序的Web.Config中設(shè)置一個(gè)具體的Key值:
<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902" decryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC" validation="SHA1" />
第三種:不同域名下的應(yīng)用程序?qū)崿F(xiàn)SSO(也適上以上情況)
主要是采用頁面URL傳參并重定向來實(shí)現(xiàn),這類實(shí)現(xiàn)的方法有很多,但可能需要注意的是安全性問題。
相關(guān)文章
asp.net mvc 實(shí)現(xiàn)文件上傳帶進(jìn)度條的思路與方法
這篇文章主要給大家介紹了關(guān)于asp.net mvc 實(shí)現(xiàn)文件上傳帶進(jìn)度條的思路與方法,文中給出了詳細(xì)的示例代碼,相信對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們可以參考借鑒,下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-12-12
asp.net 實(shí)現(xiàn)自定義Hashtable (.net)
asp.net Hashtable自定義實(shí)現(xiàn)代碼,比較多,大家可以看下,測試。2009-06-06
asp.net基于替換模版頁的形式生成靜態(tài)頁的方法
這篇文章主要介紹了asp.net基于替換模版頁的形式生成靜態(tài)頁的方法,涉及asp.net模板的設(shè)置、變量替換、配置文件設(shè)置與讀取、以及文件夾與靜態(tài)文件的創(chuàng)建等技巧,需要的朋友可以參考下2016-07-07
Web系統(tǒng)通過EXE文件實(shí)現(xiàn)讀取客戶電腦MAC等硬件信息且兼容非IE瀏覽器
我們在實(shí)際Web應(yīng)用中,可能會(huì)遇到“需要限定特定的電腦或用戶才能使用系統(tǒng)”的問題。2014-08-08
.NET6+Quartz實(shí)現(xiàn)定時(shí)任務(wù)的示例詳解
在實(shí)際工作中,經(jīng)常會(huì)有一些需要定時(shí)操作的業(yè)務(wù),如:定時(shí)發(fā)郵件,定時(shí)統(tǒng)計(jì)信息等,那么如何實(shí)現(xiàn)才能使得我們的項(xiàng)目整齊劃一呢?本文通過一些簡單的小例子,簡述在.Net6+Quartz實(shí)現(xiàn)定時(shí)任務(wù)的一些基本操作,如有不足之處,還請指正2023-03-03

