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

來源:互聯網
上載者:User

標籤:方法   服務   asp.net   資訊   use   需要   步驟   ace   整合   

單點登入系統,簡稱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

 

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.