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

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

教你開發asp.net的單點登錄系統

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

教你開發asp.net的單點登錄系統

單點登錄系統,簡稱SSO。以下是我花了幾個小時寫的一個簡單實現。特把實現思路和大家分享。

背景:某項目使用ASP.NET MemberShip來做會員系統,需要同時登錄多個系統。而項目的開發人員無法在MemberShip基礎上做單點登錄。

故這個單點登錄系統需要能無縫集成到這些系統中的任何系統中,作為服務端。

下面我們來看看具體的實現步驟,沒耐心看完的朋友可直接上github上查閱:(https://github.com/newmin/cms/blob/master/extend/Ops.Cms.Extend/SSO/):

一. 定義SSO的主要方法:

1. 客戶端需要包含:登錄,登出,獲取會話

 1 using System; 2 using System.Web; 3 using Ops.Cms.Extend.SSO; 4  5 namespace Ops.Cms.Extend.SSO.Client 6 { 7     public interface IsessionClient 8     { 9         /// <summary>10         /// 處理SSO請求11         /// </summary>12         /// <param name="context"></param>13         void HandleSsoRequest(HttpContext context);14 15         /// <summary>16         /// 獲取會話17         /// </summary>18         /// <param name="sessionKey"></param>19         /// <returns></returns>20         SessionResult GetSession(String sessionKey);21 22         /// <summary>23         /// 獲取會話Key24         /// </summary>25         /// <returns></returns>26         String GetSessionKey();27 28         /// <summary>29         /// 同步登陸30         /// </summary>31         /// <param name="user"></param>32         /// <param name="pwd"></param>33         /// <returns></returns>34         SsoResult Login(String user, String pwd);35 36         /// <summary>37         /// 同步登出38         /// </summary>39         /// <param name="sessionKey"></param>40         /// <returns></returns>41         SsoResult Logout(String sessionKey);42     }43 }

2. 服務端需要處理客戶端的請求,同時包含會話的管理,以及客戶端的注冊

using System;using System.Collections.Generic;using System.Text;using System.Web;using Ops.Framework.Extensions;namespace Ops.Cms.Extend.SSO.Server{    public class SessionServer    {        /// <summary>        /// 注冊客戶端        /// </summary>        /// <param name="url"></param>        public void RegisterClient(String url)        /// <summary>        /// 會話管理        /// </summary>        public SessionManager SessionManager        /// <summary>        /// 會話服務響應        /// </summary>        public String PRocess(HttpContext context)        /// <summary>        /// 登陸        /// </summary>        /// <param name="usr"></param>        /// <param name="pwd"></param>        /// <returns></returns>        private SsoResult Login(string usr, string pwd)        /// <summary>        /// 退出登陸        /// </summary>        /// <param name="sessionKey"></param>        /// <returns></returns>        private SsoResult LoginOut(string sessionKey)    }}

 2.1 客戶端注冊

   將客戶端注冊,在返回登錄/登出結果的時候,會請求所有客戶端,以實現同步。

 2.2 會話管理

   需要存儲會員和會話鍵之間的關系,在這個實現中我使用了KV數據庫,LevelDb來支持。

同時定義了ISessionSet,意味著可以使用任何方式來存儲會話,只要實現了ISessionSet接口

ISessionSet.cs

namespace Ops.Cms.Extend.SSO{    /// <summary>    /// 會話數據集合    /// </summary>    public interface ISessionSet    {        /// <summary>        /// 更新會話信息        /// </summary>        /// <param name="key"></param>        /// <param name="value"></param>        /// <returns>返回之前的會話信息</returns>        string Put(string key, string value);        /// <summary>        /// 刪除會話信息        /// </summary>        /// <param name="key"></param>        void Delete(string key);        /// <summary>        /// 獲取會話信息        /// </summary>        /// <param name="key"></param>        string Get(string key);    }}

三。驗證會員

因為會員不存在于此SSO中,故定義了委托,在初始化服務端時,傳入委托即可。

namespace Ops.Cms.Extend.SSO{  /// <summary>  /// 登陸處理  /// </summary>  /// <param name="usr"></param>  /// <param name="pwd"></param>  /// <returns>返回personId</returns>  public delegate int SSOLoginHandler(string usr,string pwd);}

委托返回int值,為會員的編號,所以我們還需要定義一個獲取會員信息的委托

namespace Ops.Cms.Extend.SSO{    /// <summary>    /// 人員獲取處理事件    /// </summary>    /// <param name="personId"></param>    /// <returns></returns>    public delegate Person PersonFetchHandler(int personId);}

四. 啟動服務端

至此,我們已經完成了基本實現。

PS: 好久沒有發博客了,好辛苦。直接附上DEMO:

https://github.com/newmin/cms/blob/master/extend/Ops.Cms.Extend/SSO/Demo/server.ashx.cs


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴安县| 遂溪县| 右玉县| 东光县| 格尔木市| 科尔| 镇沅| 綦江县| 松滋市| 昭觉县| 蛟河市| 邳州市| 蒙阴县| 潮州市| 镇宁| 岳普湖县| 东辽县| 涪陵区| 洪湖市| 卢龙县| 简阳市| 建宁县| 天津市| 偃师市| 乌兰县| 光泽县| 德格县| 临猗县| 吉安市| 黑水县| 大足县| 邹平县| 成武县| 东辽县| 精河县| 沅陵县| 巴彦淖尔市| 莱州市| 融水| 岳阳县| 拜泉县|