亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

誰都能看懂的單點登錄(SSO)實現方式(附源碼)

2019-11-17 01:28:16
字體:
來源:轉載
供稿:網友

誰都能看懂的單點登錄(SSO)實現方式(附源碼

SSO的基本概念

SSO英文全稱Single Sign On(單點登錄)。SSO是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登錄映射到其他應用中用于同一個用戶的登錄的機制。它是目前比較流行的企業業務整合的解決方案之一。(本段內容來自百度百科)

今天這篇文章將介紹SSO的一種實現方式,代碼超簡單,僅用來驗證我的思路是否可行,具體細節請大家來完善!

二級域名的單點登錄

什么是二級域名呢?例如:

  • site1.domain.com
  • site2.domain.com

對于二級域名的單點登錄,我們可以非常方便的通過共享cookie來實現,簡單的說,就是在設置Form票據的時候,將cookie的domain設置為頂級域名即可,例如:

HttpCookie cookie = new HttpCookie(FormsAuthCookieName, encryptedTicket);cookie.Expires = rememberMe ? expirationDate : DateTime.MinValue;cookie.HttpOnly = true;cookie.Path = "/";cookie.Domain = "domain.com";context.Response.Cookies.Set(cookie);

這種方式不涉及跨域,當cookie的domain屬性設置為頂級域名之后,所有的二級域名都可以訪問到身份驗證的cookie,在服務器端只要驗證了這個cookie就可以實現身份的驗證。

但是,當跨域的時候,例如:

  • site1.com
  • site2.com

這個時候就不能共享cookie了,所以上面的解決方案就會失效。那么,要實現跨域的單點登錄該如何做呢?請繼續往下看。

跨域的單點登錄

關于跨域的SSO的設計思路,我畫了一個簡單的流程圖:

image

首先,我將跨域的SSO分為SSO-Server和SSO-Client兩個部分,SSO-Client可以是多個的。

SSO-Server

SSO-Server主要負責用戶登錄、注銷、為SSO-Client分配taken、驗證taken的工作。

登錄和注銷采用的是Form認證方式,很多地方都有詳細的介紹,我之前也寫過一篇文章,想了解的可以去看看:asp.net Forms身份驗證詳解

SSO-Server分配Token

為SSO-Client分配Token的部分,在SSO-Client請求SSO受信頁面的時候,檢查SSO-Server是否登錄,如果沒有登錄則跳轉到SSO-Server的登錄頁面,如果已登錄,則執行分配Token的代碼,在分配完成以后將TokenID作為參數添加到returnUrl中,并跳轉到returnUrl,具體的分配代碼如下:

if (Domain.Security.SmartAuthenticate.LoginUser != null){    //生成Token,并持久化Token    Domain.SSO.Entity.SSOToken token = new Entity.SSOToken();        token.User = new Entity.SSOUser();    token.User.UserName = Domain.Security.SmartAuthenticate.LoginUser.UserName;    token.LoginID = session.SessionID;    Domain.SSO.Entity.SSOToken.SSOTokenList.Add(token);    //拼接返回的url,參數中帶Token    string spliter = returnUrl.Contains('?') ? "&" : "?";    returnUrl = returnUrl + spliter + "token=" + token.ID;    Response.Redirect(returnUrl);}

當完成Token分配之后,頁面將帶有TokenID的參數跳轉到SSO-Client頁面,并在SSO-Client的Cookie中添加Token值,在以后的每次請求中,SSO-Client通過調用SSO-Server的服務來驗證Token的合法性。

SSO-Server驗證Token

我是通過WebService來驗證Token的。

首先在SSO-Server定義一個Web Service:

[WebMethod]public Entity.SSOToken ValidateToken(string tokenID){    if (!KeepToken(tokenID))        return null;    var token = Domain.SSO.Entity.SSOToken.SSOTokenList.Find(m => m.ID == tokenID);    return token;}[WebMethod]public bool KeepToken(string tokenID){    var token = Domain.SSO.Entity.SSOToken.SSOTokenList.Find(m => m.ID == tokenID);    if (token == null)        return false;    if (token.IsTimeOut())        return false;    token.AuthTime = DateTime.Now;    return true;}

ValidateToken用來驗證TokenID的合法性,KeepToken用來保持Token不會過期。

SSO-Client通過調用Validate驗證Token,并得到當前的登錄用戶信息。接下來看看SSO-Client的實現。

SSO-Client

SSO-Client作為受信系統來存在的,它自己沒有認證系統,只能通過SSO-Server來完成用戶身份認證的工作。

當用戶請求SSO-Client的受保護資源時,SSO-Client會首先是否有TokenID,如果存在TokenID,則調用SSO-Server的WebService來驗證這個TokenID是否合法;

驗證成功以后將會返回SSOToken的實例,里面包含已登錄的用戶信息。具體代碼如下:

if (!string.IsNullOrEmpty(tokenID)){    AuthTokenService.AuthTokenServiceSoapClient client = new AuthTokenService.AuthTokenServiceSoapClient();    var token = client.ValidateToken(tokenID);    if (token != null)    {        this.lblMessage.Text = "登錄成功,登錄用戶:"            + token.User.UserName            + "<a             + Server.UrlEncode("http://sso-client.com")            + "'>退出</a>";    }    else    {        Response.Redirect("http://sso-server.com/sso.aspx?returnUrl=" +            Server.UrlEncode("http://sso-client.com/default.aspx"));    }}else{    Response.Redirect("http://sso-server.com/sso.aspx?returnUrl=" +        Server.UrlEncode("http://sso-client.com/default.aspx"));}

源代碼

文章中已經介紹了我的具體思路和一些實現,如果你仍然感興趣,可以下載我的代碼>>Demo.SSO

源代碼的部署:

1. 在IIS中創建兩個站點,分別綁定到SSO-Server和SSO-Client,它們綁定的域名分別是sso-server.com和sso-client.com

2. 在hosts文件中添加兩行映射,將sso-server.com和sso-client.com映射到127.0.0.1,確保可以訪問

3.訪問sso-client.com,這個時候頁面將跳轉到sso-server.com的登錄頁面,用戶名、密碼隨便輸入,然后點擊登錄即可

我很認真的完成了這個方案,也感謝你很認真的看完!歡迎拍磚!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清激情视频| 亚洲欧洲美洲在线综合| 性欧美xxxx交| 欧美性猛交xxxx免费看漫画| 日韩亚洲在线观看| 国产精品老牛影院在线观看| 国产亚洲美女久久| 中文日韩电影网站| 国产脚交av在线一区二区| 欧美国产日韩视频| 最近2019中文字幕一页二页| 亚洲欧美国产一区二区三区| 欧美午夜性色大片在线观看| 亚洲欧洲第一视频| 成人福利在线观看| 日韩成人在线免费观看| 亚洲激情在线观看| 亚洲综合色av| 亚洲国产精品久久| 精品国内亚洲在观看18黄| 亚洲另类图片色| 欧美高清不卡在线| 国产日韩中文在线| 亚洲精品视频久久| 91国产视频在线播放| 亚洲精品视频中文字幕| 精品国产户外野外| 欧美国产第二页| 国产三级精品网站| 国产精品白嫩初高中害羞小美女| 日韩久久精品电影| 久久久www成人免费精品张筱雨| 久久手机免费视频| 91免费观看网站| 欧美尺度大的性做爰视频| 欧美精品久久久久久久久| 国语自产精品视频在线看抢先版图片| 亚洲色图第三页| 国产香蕉一区二区三区在线视频| 91国内揄拍国内精品对白| 91丝袜美腿美女视频网站| 色爱av美腿丝袜综合粉嫩av| 国产美女精品免费电影| 欧美性xxxx在线播放| 伦理中文字幕亚洲| 日韩成人在线电影网| 国产精品三级在线| 亚洲2020天天堂在线观看| 最新国产成人av网站网址麻豆| 自拍偷拍亚洲区| 欧美成年人视频网站| 精品香蕉一区二区三区| 日韩女在线观看| 97视频免费观看| 欧美人成在线视频| 亚洲精品v欧美精品v日韩精品| 国产精品三级美女白浆呻吟| 亚洲最大成人网色| 久久久久久久激情视频| 欧美成人网在线| 国内精品小视频在线观看| 久久男人资源视频| 成人精品视频久久久久| 精品在线小视频| 亚洲日本中文字幕| 亚洲欧美国产日韩中文字幕| 亚洲a中文字幕| 17婷婷久久www| 91亚洲午夜在线| 亚洲高清久久久久久| 日本aⅴ大伊香蕉精品视频| 一本大道香蕉久在线播放29| 欧美午夜久久久| 成人黄色在线播放| 7m精品福利视频导航| 亚洲色图35p| 欧美中文字幕视频| 国产精品自拍小视频| 欧美极品少妇与黑人| 精品中文字幕久久久久久| 亚洲丁香久久久| 久久久极品av| 亚洲第一区在线观看| 欧美视频在线免费看| 亚洲精品一区在线观看香蕉| 亚洲日本aⅴ片在线观看香蕉| 国产成人精品久久| 成人精品一区二区三区电影黑人| 92版电视剧仙鹤神针在线观看| 成人美女av在线直播| 亚洲国产成人精品女人久久久| 国产91色在线|免| 午夜精品久久久久久久99黑人| 国产免费一区二区三区在线能观看| 日韩一区二区av| 亚洲iv一区二区三区| 亚洲精品久久视频| 久久久久久亚洲精品不卡| 亚洲人午夜色婷婷| 在线观看日韩www视频免费| 国产网站欧美日韩免费精品在线观看| 亚洲国产精品va在线看黑人动漫| 亚洲一区二区久久| 91丝袜美腿美女视频网站| 午夜精品理论片| 亚洲黄页视频免费观看| 欧美日韩国产综合新一区| 成人免费看黄网站| 国产日韩在线看| 91亚洲午夜在线| 最近2019中文字幕一页二页| 欧美天堂在线观看| 黄色成人在线免费| 亚洲女性裸体视频| 欧美日韩国产限制| 色av吧综合网| 中国china体内裑精亚洲片| 国产欧美亚洲精品| 日本国产欧美一区二区三区| 1769国内精品视频在线播放| 亚洲欧美成人精品| 国产91九色视频| 国产精品mp4| 日韩欧美有码在线| 成人福利视频在线观看| 中文字幕亚洲欧美日韩在线不卡| 亚洲美女视频网| 中文精品99久久国产香蕉| 精品国偷自产在线视频99| 宅男66日本亚洲欧美视频| 午夜精品视频在线| 欧美一级淫片播放口| 欧美激情一区二区三区久久久| 久久亚洲精品毛片| 久久久www成人免费精品张筱雨| 欧美成人免费va影院高清| 欧美激情videos| 日本一欧美一欧美一亚洲视频| 欧美在线国产精品| 国产精品免费小视频| 亚洲欧美国产另类| 久久亚洲精品毛片| 亚洲美女av网站| 国产精品一区二区三区久久久| 国产日韩欧美影视| 色偷偷偷亚洲综合网另类| 欧美电影免费播放| 日韩中文字幕在线精品| 色爱精品视频一区| 亚洲www在线观看| 亚洲精品免费一区二区三区| 欧美精品在线观看| 在线色欧美三级视频| 亚洲大胆人体av| 亚洲精品白浆高清久久久久久| 91久久久精品| 国产精品va在线| 欧美日韩成人在线观看| 欧美一区在线直播| 久久精品久久精品亚洲人| 亚洲精品久久久久久久久久久久久| 国产精品久久久久久久久久久久| 日本不卡视频在线播放| 亚洲第一黄色网|