ASP.NET實(shí)現(xiàn)單點(diǎn)登陸(SSO)適用于多種情況
第一種:同主域但不同子域之間實(shí)現(xiàn)單點(diǎn)登陸
Form驗(yàn)證其實(shí)是基于身份cookie的驗(yàn)證??蛻?hù)登陸后,生成一個(gè)包含用戶(hù)身份信息(包含一個(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的名字。通過(guò)在Request.Cookies集合里包含這個(gè)cookie,實(shí)現(xiàn)用戶(hù)身份信息的傳遞。所以,共享身份驗(yàn)證信息的思路很簡(jiǎ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",通過(guò)Hash值進(jìn)行加密和驗(yàn)證數(shù)據(jù)都存放在Cookie中.默認(rèn)的驗(yàn)證和加密使用的Key都存儲(chǔ)在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來(lái)加密解密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(也適上以上情況)
主要是采用頁(yè)面URL傳參并重定向來(lái)實(shí)現(xiàn),這類(lèi)實(shí)現(xiàn)的方法有很多,但可能需要注意的是安全性問(wèn)題。
相關(guān)文章
使用母版頁(yè)時(shí)內(nèi)容頁(yè)如何使用css和javascript
由于網(wǎng)站的主要頻道頁(yè)和列表頁(yè)的頭部和底部都是一樣的,如果將每個(gè)頁(yè)面放在單獨(dú)的頁(yè)面中,當(dāng)頭部和底部需要更改時(shí)維護(hù)量太大。于是想把頭部和底部做成母版頁(yè),頻道頁(yè)和列表頁(yè)的具體內(nèi)容放到內(nèi)容頁(yè)中。這樣當(dāng)頭和底需要改動(dòng)時(shí),只要修改一下母版頁(yè)就可以了。2009-08-08淺談.Net Core 認(rèn)證系統(tǒng)源碼解析
這篇文章主要介紹了淺談.Net Core 認(rèn)證系統(tǒng)源碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12asp.net運(yùn)算符之邏輯運(yùn)算符以及其他運(yùn)算符介紹與實(shí)例
在.net中運(yùn)算符分類(lèi)很多種類(lèi)型,包括有我們常用的boolean型運(yùn)算符,通用的運(yùn)行符有 ==、!=、<、>、<=、>=、binary +、binary -、^、&、|、~、++、-- 和 sizeof()2013-08-08CheckBox控件默認(rèn)選中,提交時(shí)永遠(yuǎn)獲得選中狀態(tài)的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇CheckBox控件默認(rèn)選中,提交時(shí)永遠(yuǎn)獲得選中狀態(tài)的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05asp.net下Response.ContentType類(lèi)型匯總
asp.net下Response.ContentType類(lèi)型匯總...2007-04-04asp.net開(kāi)發(fā)與web標(biāo)準(zhǔn)的沖突問(wèn)題的一些常見(jiàn)解決方法
Visual Studio .net從2003到現(xiàn)在的2008,一路走來(lái)慢慢強(qiáng)大……從以前的vs2003能自動(dòng)改亂你的html代碼到現(xiàn)在在vs2008中都能直接對(duì)html代碼進(jìn)行w3c標(biāo)準(zhǔn)驗(yàn)證并提示了,非常不易。2009-02-02asp.net中獲取遠(yuǎn)程網(wǎng)頁(yè)的內(nèi)容之一(downmoon原創(chuàng))
asp.net中獲取遠(yuǎn)程網(wǎng)頁(yè)的內(nèi)容之一(downmoon原創(chuàng))...2007-04-04asp.net中SqlCacheDependency緩存技術(shù)概述
這篇文章主要介紹了asp.net中SqlCacheDependency緩存技術(shù)概述,是大型web程序設(shè)計(jì)中常用的技術(shù),本文對(duì)此進(jìn)行了較為詳細(xì)的描述,需要的朋友可以參考下2014-08-08