aspの開発を教えてあげます.Netのワンポイントログインシステム

15885 ワード

単点登録システム、略称SSO.以下は私が数時間かけて書いた簡単な実現です.特に実現の構想をみんなと分かち合う.
背景:ある項目はASPを使用する.NETメンバーシップシステムを作るには、複数のシステムを同時に登録する必要があります.プロジェクトの開発者は、メンバーシップに基づいて単一のログインを行うことができません.
したがって、この単一のログインシステムは、サービス側として、これらのシステム内の任意のシステムにシームレスに統合される必要がある.
 
次に、具体的な実装手順を見てみましょう.辛抱強く見ていない友达は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         ///     Key
24         /// </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