這篇文章主要介紹了asp.net如何實現(xiàn)可跨域的單點登錄SSO,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)成都企業(yè)網(wǎng)站建設(shè)服務(wù),提供網(wǎng)站設(shè)計、成都網(wǎng)站制作網(wǎng)站開發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站,網(wǎng)頁設(shè)計師打造企業(yè)風(fēng)格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務(wù)。歡迎咨詢做網(wǎng)站需要多少錢:18982081108SSO簡介
定義:
傳統(tǒng)的單站點登錄訪問授權(quán)機制是:登錄成功后將用戶信息保存在session中,sessionId保存在cookie中,每次訪問需要登錄訪問的資源(url)時判斷當前session是否為空,為空的話跳轉(zhuǎn)到登錄界面登錄,不為空的話允許訪問。
單點登錄是一種多站點共享登錄訪問授權(quán)機制,訪問用戶只需要在一個站點登錄就可以訪問其它站點需要登錄訪問的資源(url)。用戶在任意一個站點注銷登錄,則其它站點的登錄狀態(tài)也被注銷。簡而言之就是:一處登錄,處處登錄。一處注銷,處處注銷。
應(yīng)用場景:
當一個網(wǎng)站系統(tǒng)稍微復(fù)雜一些的時候,需要對業(yè)務(wù)進行拆分,比如一個電商網(wǎng)站,可以將商品搜索、商品詳情、購物車、訂單等拆分成一個個子系統(tǒng),。當一個系統(tǒng)拆分成多個子系統(tǒng)的時候就需要單點登錄來做授權(quán)了。
業(yè)務(wù)需求:
最近公司因為業(yè)務(wù)需要開發(fā)了一些子系統(tǒng)需要和主站進行集成,在網(wǎng)上看了好多單點登錄的教程,綜合各種情況總結(jié)出了了下面的單點登錄實現(xiàn)思路。其中用到了輪詢跳轉(zhuǎn)的思路來解決同時給多個分站寫cookie的問題。如有不妥之處歡迎各位批評指正。
實現(xiàn)功能:
1.可完全跨域
2.url透明(分站跳轉(zhuǎn)不需要url傳遞token或者ticket)
3.同步注銷
4.一次將cookie寫入到多個分站
效果預(yù)覽 :
實現(xiàn)思路
實現(xiàn)難點:
這種方式的難點是:怎么在a.com登錄的時候?qū)ookie同時寫到b.com中。我使用的方式是現(xiàn)在sso.com中維護一個分站集合,在登錄成功后以輪詢跳轉(zhuǎn)的方式將cookie寫到各個分站中。
具體思路:
1.第一次訪問a.com-> 點擊a.com頁面的登錄按鈕->跳轉(zhuǎn)到sso.com進行登錄驗證->登錄成功后將數(shù)據(jù)存到cache中->然后以輪詢跳轉(zhuǎn)的方式依次訪問各個分站并將cookie寫到各個分站->最后跳轉(zhuǎn)到登錄來源頁面
2.登錄成功后->訪問需要登錄的資源(url)->后臺發(fā)送請求到sso.com進行cookie有效性驗證->驗證通過訪問資源
代碼分析
1.新建三個站點:a.com,b.com,sso.com
2.在a.com中新建home/index頁面,如下:
第一次訪問cookie不存在,當以模擬請求的方式到sso.com/login/validateLogin進行驗證的時候返回error,頁面顯示未登錄狀態(tài)
對應(yīng)的view頁面如下:
sso.com/login/validateLogin對應(yīng)的代碼:
3.在a.com的首頁點擊登錄按鈕跳轉(zhuǎn)到sso.com的登錄頁面(login/index)
4.sso.com中的登錄代碼如下:
5.點擊登錄進入到登錄驗證方法
生成token,同時將用戶信息以token為鍵保存在cache中并設(shè)置過期時間
獲取分站集合,以重定向輪詢的方式依次向每個分站寫cookie,最后重定向到登錄來源頁面
登錄驗證方法如下:
a.com和b.com中的跳轉(zhuǎn)寫cookie的方法代碼如下:
/// <summary> /// 用跳轉(zhuǎn)的方式寫cookie /// </summary> /// <param name="token">授權(quán)驗證的令牌</param> /// <param name="others">一系列分站</param> /// <param name="main">登錄成功返回的站點</param> /// <returns></returns> public ActionResult Jump(string token, string others, string main) { HttpCookie cookie = new HttpCookie("currentUser"); cookie.HttpOnly = true; cookie.Expires = DateTime.Now.AddYears(100);//永不過期 cookie.Value = token; Response.Cookies.Add(cookie); //依次減掉已經(jīng)寫過cookie的分站 if (!string.IsNullOrEmpty(others)) { //獲取分站集合 var substationList = others.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); if (substationList.Count == 1) { return Redirect(others + "&main=" + main); } else { string currentRedirect = substationList[0]; substationList.RemoveAt(0); string otherss = string.Join(",", substationList); return Redirect(currentRedirect + "&others=" + otherss + "&main=" + main); } } else { return Redirect(main);//跳轉(zhuǎn)到登錄來源頁面 } }
6.返回登錄來源頁面a.com/home/index或者b.com/home/index
此時a.com和b.com已經(jīng)都有cookie
7.登出(退出登錄)的處理
登出直接調(diào)用sso.com/login/LoginOut方法,如下:
感謝你能夠認真閱讀完這篇文章,希望小編分享的“asp.net如何實現(xiàn)可跨域的單點登錄SSO”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
分享名稱:asp.net如何實現(xiàn)可跨域的單點登錄SSO-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://m.rwnh.cn/article12/djoogc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、移動網(wǎng)站建設(shè)、面包屑導(dǎo)航、虛擬主機、Google、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容