简单SSO(Single sign-on)的另类实现方式,钩子技术

      在企业信息化过程中,往往企业中会存一多套已经成熟且稳定应用的系统,系统使用人员通常在登录不同的系统时要输入不同的用户名或账号及密码,影响工作效率,同时在不同的系统中切换时非常繁琐.
      针对上述情况,在实际信息化实施中,我们实现了对于没有源码的CS系统一种另类解决方式.
 
      1\建立标准用户信息表,在单独的数据库中;
      2\维护各应用系统的用户信息与标准用户信息做对照;
      3\创建统一验证平台登录界面进行系统验证;
      4\获取欲进入系统的真正用户名\密码信息,使用钩子技术进行传递,完成用户名\密码输入和校验.


      这只是一个简单的原理,根据需要,还可能要增加各系统与统一验证平台之间用户名\密码统一的工作.

      附件有两个例子:有兴趣的朋友可以看一下.
      WinAppHOOK.exe   为集成验证平台原型.
      WinAppMaster.exe   为子系统原型.
      这个原型的功能,可以通过 WinAppHOOK填充 WinAppMaster的文本框和点击WinAppMaster的按钮.

       WinAppHOOK代码
 1 简单SSO(Single sign-on)的另类实现方式,钩子技术 using  System;
 2 简单SSO(Single sign-on)的另类实现方式,钩子技术 using  System.Text;
 3 简单SSO(Single sign-on)的另类实现方式,钩子技术 using  System.Drawing;
 4 简单SSO(Single sign-on)的另类实现方式,钩子技术 using  System.Collections;
 5 简单SSO(Single sign-on)的另类实现方式,钩子技术 using  System.ComponentModel;
 6 简单SSO(Single sign-on)的另类实现方式,钩子技术 using  System.Windows.Forms;
 7 简单SSO(Single sign-on)的另类实现方式,钩子技术 using  System.Runtime.InteropServices; 
 8 简单SSO(Single sign-on)的另类实现方式,钩子技术
 9 简单SSO(Single sign-on)的另类实现方式,钩子技术 namespace  WinAppHOOK
10 简单SSO(Single sign-on)的另类实现方式,钩子技术 {
11简单SSO(Single sign-on)的另类实现方式,钩子技术    public partial class frmMain : Form
12简单SSO(Single sign-on)的另类实现方式,钩子技术    {
13简单SSO(Single sign-on)的另类实现方式,钩子技术        public frmMain()
14简单SSO(Single sign-on)的另类实现方式,钩子技术        {
15简单SSO(Single sign-on)的另类实现方式,钩子技术            InitializeComponent();
16简单SSO(Single sign-on)的另类实现方式,钩子技术        }

17简单SSO(Single sign-on)的另类实现方式,钩子技术
18简单SSO(Single sign-on)的另类实现方式,钩子技术        private void btnSendClick_Click(object sender, EventArgs e)
19简单SSO(Single sign-on)的另类实现方式,钩子技术        {
20简单SSO(Single sign-on)的另类实现方式,钩子技术            IntPtr hwnd_win;
21简单SSO(Single sign-on)的另类实现方式,钩子技术            IntPtr hwnd_button;
22简单SSO(Single sign-on)的另类实现方式,钩子技术
23简单SSO(Single sign-on)的另类实现方式,钩子技术            hwnd_win = FindWindow("WindowsForms10.Window.8.app.0.378734a""Main");
24简单SSO(Single sign-on)的另类实现方式,钩子技术            hwnd_button = FindWindowEx(hwnd_win, new IntPtr(0), "WindowsForms10.BUTTON.app.0.378734a""OK");
25简单SSO(Single sign-on)的另类实现方式,钩子技术
26简单SSO(Single sign-on)的另类实现方式,钩子技术            const int BM_CLICK = 0x00F5;
27简单SSO(Single sign-on)的另类实现方式,钩子技术            Message msg = Message.Create(hwnd_button, BM_CLICK, new IntPtr(0), new IntPtr(0));
28简单SSO(Single sign-on)的另类实现方式,钩子技术            PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam); 
29简单SSO(Single sign-on)的另类实现方式,钩子技术
30简单SSO(Single sign-on)的另类实现方式,钩子技术        }

31简单SSO(Single sign-on)的另类实现方式,钩子技术
32简单SSO(Single sign-on)的另类实现方式,钩子技术        private void btnSendText_Click(object sender, EventArgs e)
33简单SSO(Single sign-on)的另类实现方式,钩子技术        {
34简单SSO(Single sign-on)的另类实现方式,钩子技术            const int WM_CHAR = 0x0102;
35简单SSO(Single sign-on)的另类实现方式,钩子技术            const int WM_GETTEXT = 0x000D;
36简单SSO(Single sign-on)的另类实现方式,钩子技术            const int WM_SETTEXT = 0x000C;
37简单SSO(Single sign-on)的另类实现方式,钩子技术            const int WM_CLICK = 0x00F5;
38简单SSO(Single sign-on)的另类实现方式,钩子技术            string text = "";
39简单SSO(Single sign-on)的另类实现方式,钩子技术
40简单SSO(Single sign-on)的另类实现方式,钩子技术            IntPtr ParenthWnd = new IntPtr(0);            
41简单SSO(Single sign-on)的另类实现方式,钩子技术            IntPtr EdithWnd = new IntPtr(0);
42简单SSO(Single sign-on)的另类实现方式,钩子技术
43简单SSO(Single sign-on)的另类实现方式,钩子技术            ParenthWnd = FindWindow("WindowsForms10.Window.8.app.0.378734a""Main");
44简单SSO(Single sign-on)的另类实现方式,钩子技术
45简单SSO(Single sign-on)的另类实现方式,钩子技术            //得到User Name这个子窗体,并设置其内容 
46简单SSO(Single sign-on)的另类实现方式,钩子技术            EdithWnd = FindWindowEx(ParenthWnd, EdithWnd, "WindowsForms10.EDIT.app.0.378734a""");
47简单SSO(Single sign-on)的另类实现方式,钩子技术            if (!EdithWnd.Equals(IntPtr.Zero))
48简单SSO(Single sign-on)的另类实现方式,钩子技术            {
49简单SSO(Single sign-on)的另类实现方式,钩子技术                text = "User";
50简单SSO(Single sign-on)的另类实现方式,钩子技术                //调用SendMessage方法设置其内容 
51简单SSO(Single sign-on)的另类实现方式,钩子技术                SendMessage(EdithWnd, WM_SETTEXT, (IntPtr)0, text);
52简单SSO(Single sign-on)的另类实现方式,钩子技术            }

53简单SSO(Single sign-on)的另类实现方式,钩子技术
54简单SSO(Single sign-on)的另类实现方式,钩子技术            //得到Password这个子窗体,并设置其内容 
55简单SSO(Single sign-on)的另类实现方式,钩子技术            EdithWnd = FindWindowEx(ParenthWnd, EdithWnd, "WindowsForms10.EDIT.app.0.378734a""");
56简单SSO(Single sign-on)的另类实现方式,钩子技术            if (!EdithWnd.Equals(IntPtr.Zero))
57简单SSO(Single sign-on)的另类实现方式,钩子技术            {
58简单SSO(Single sign-on)的另类实现方式,钩子技术                text = "Password";
59简单SSO(Single sign-on)的另类实现方式,钩子技术                SendMessage(EdithWnd, WM_SETTEXT, (IntPtr)0, text);
60简单SSO(Single sign-on)的另类实现方式,钩子技术            }
 
61简单SSO(Single sign-on)的另类实现方式,钩子技术
62简单SSO(Single sign-on)的另类实现方式,钩子技术        }

63简单SSO(Single sign-on)的另类实现方式,钩子技术
64简单SSO(Single sign-on)的另类实现方式,钩子技术        [DllImport("user32.dll")]
65简单SSO(Single sign-on)的另类实现方式,钩子技术        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
66简单SSO(Single sign-on)的另类实现方式,钩子技术
67简单SSO(Single sign-on)的另类实现方式,钩子技术        [DllImport("user32.dll")]
68简单SSO(Single sign-on)的另类实现方式,钩子技术        public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
69简单SSO(Single sign-on)的另类实现方式,钩子技术
70简单SSO(Single sign-on)的另类实现方式,钩子技术        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
71简单SSO(Single sign-on)的另类实现方式,钩子技术        public static extern IntPtr PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
72简单SSO(Single sign-on)的另类实现方式,钩子技术
73简单SSO(Single sign-on)的另类实现方式,钩子技术        [DllImport("User32.dll", EntryPoint = "SendMessage")]
74简单SSO(Single sign-on)的另类实现方式,钩子技术        public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, string lParam); 
75简单SSO(Single sign-on)的另类实现方式,钩子技术
76简单SSO(Single sign-on)的另类实现方式,钩子技术
77简单SSO(Single sign-on)的另类实现方式,钩子技术    }

78简单SSO(Single sign-on)的另类实现方式,钩子技术}

WinAppMaster代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WinAppMaster
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Master单击");
        }
    }
}

你可能感兴趣的:(sign)