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

首頁 > 學院 > 開發設計 > 正文

FormsAuthentication實現單點登錄

2019-11-17 02:58:40
字體:
來源:轉載
供稿:網友

FormsAuthentication實現單點登錄

原文地址:http://www.wlm.so/Article/Detail/lmb48bk9f690n00000

單點登錄,這種在網絡非常常見,在這里討論的是實現同一主域下的子站間的單點登錄,同樣也適用于使用負載均衡后站點的登錄識別。

.net,討論基于MVC環境下的,假設域名為 wlm.so。

基礎條件:

1.cookie共享

2.FormsAuthentication加密

3.服務器端處理

還是一樣,從原理開始:

原理非常簡單,所有登錄后,將用戶的標識放在客戶端的cookie里面,通過cookie共享,每次請求服務器端將客戶端發送的cookie直接當成標識來識別用戶。

這個過程中安全就非常重要了,怎么做到安全呢?

FormsAuthentication認證,FormsAuthenticationTicket票據加密。

1.cookie共享

假設主域為wlm.so,子域為a.wlm.so以及b.wlm.so。

那么在服務器端寫入cookie時必須為cookie指定主域。代碼如下:

那么當cookie未過期時,打開a.wlm.so或者打開b.wlm.so時該cookie就會相應的被提交。

2.FormsAuthentication加密

假設,我們在cookie寫上用戶名的話,那將是非常的不安全,因此使用FormsAuthentication驗證方式,通過FormsAuthentication創建驗證票據,將票據保存在客戶端。

首先上代碼:

webconfig配置票據代碼:

票據創建與寫入代碼,login.LoginName是登錄名,也是用戶標識:

通過創建票據后,寫入客戶端cookie,如果需要記錄登錄信息,請加上cookie過期時間即可。

通過上述創建的票據將被寫在cookie中,訪問主域下的二級網站時均會被提交。但是不同IIS該票據加密密鑰是不一樣的,因此無法識別,需要配置密鑰讓不同服務器上的IIS都能識別驗證票據。

3.FormsAuthentication密鑰生成與配置

只需要在webconfig中增加配置即可:

該配置中附帶著加密密鑰與解密密鑰以及加密方式,密鑰不是隨意生成的,附帶生成代碼:

點擊下載生成代碼

4.服務器識別到用戶標識后,需要進行session記錄,或者其他記錄方式即可通過通常代碼實現,這里不做討論。服務器端獲取用戶登錄名如下:

a)判斷用戶是否已經登錄

if(httpContext.User.Identity.IsAuthenticated){

//已經登錄

}

b)獲取登錄名

string name=HttpContext.Current.User.Identity.Name;//即前文中的login.loginName

附上代碼:

HttpCookie cookie = new System.Web.HttpCookie("cookiename", "cookievalue");cookie.Domain = "wlm.so";System.Web.HttpContext.Current.Response.Cookies.Add(cookie);FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,// 版本號。u.Id,// 與身份驗證票關聯的用戶名。DateTime.Now,// Cookie 的發出時間。DateTime.Now.AddMinutes(1000),// Cookie 的到期日期。login.Persistent != 0,// 如果 Cookie 是持久的,為 true;否則為 false。login.LoginName//寫入用戶名稱);HttpCookie cookie =new System.Web.HttpCookie(FormsAuthentication.FormsCookieName,FormsAuthentication.Encrypt(ticket));cookie.Domain = "wlm.so";System.Web.HttpContext.Current.Response.Cookies.Add(cookie);return LoginState.Success;<authentication mode="Forms"> <forms name="FormsAuthCookie"path="/" loginUrl="~/Login"domain="wlm.so" /></authentication><machineKey validationKey="****"decryptionKey="***"validation="SHA1"/>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 治县。| 莱州市| 襄汾县| 鄂伦春自治旗| 峡江县| 若尔盖县| 泸溪县| 定兴县| 夏河县| 连州市| 常宁市| 新民市| 轮台县| 孟州市| 武宣县| 和政县| 余姚市| 四会市| 乌鲁木齐市| 通州市| 邢台县| 五寨县| 类乌齐县| 渭南市| 彝良县| 清水县| 兴安县| 锦州市| 定边县| 长春市| 丰顺县| 潜山县| 蒙城县| 怀远县| 永年县| 从江县| 天长市| 清流县| 巩义市| 温宿县| 东乌|