通用权限管理系统组件 (GPM - General Permissions Manager) 中实现统一身份认证(Single Sign On,单点登录)附源码
其实很多开发人员都早已经进入.NET时代了,更有不少都在ASP.NET MVC了,但是去年碰到一个客户还在用很古老的asp系统,而且有接近10来个各种应用系统都是用ASP开发的,这样一来想升级到C# ASP.NET还需要一个很漫长的过程。历史遗留下来的系统不是那么容易想说升级就升级,需要有统一规划,还需要系统的培训,有计划有目进行才能成功升级。
很多年没写asp的程序了看看代码就头大根本无从下手,也根本没心思把那么多系统进行重构那不知道要重构多长时间了,但是没办法只能硬着头皮上,以前的ASP老系统也要移植到通用权限管理系统的单点登录上来,在不知道这些情况的时候,就在客户面前牛也吹了,若不能实现这些功能了,这台阶也下不来了。春节期间正好休息没什么其他重要的事情需要处理,就完善一下ASP.NET与asp老系统的单点登录集成,下面把一些思路与做法写下来,给大家提供一个参考,有写得不足的地方,欢迎大家批评指导。
asp的实现好了后,php, java 等等各种各样的就同一个思路搞定就可以了,细节调试一下就可以了,方法思路都一样就可以了。
下面先看看程序的运行效果:
其中asp目录为当前验证单点登录的测试测试程序,只要引用几个函数就可以了。DotNet.WebForm 为通用权限管理系统中的当点登录实现网站,crm目录为asp.net的单点登录用例代码部分。
若当前用户还没登录,系统会自动跳转到通用权限管理系统的登录页面中来。
我们输入好用户名密码,进行登录验证
系统会自动跳转到当前的asp系统里来了,而且显示出当前用户的登录主键,还可以获取很多信息,大家按需要改进一下函数就可以了,原先的asp系统只要小改一些内容就可以了,不用进行翻天覆地的重构,这个总比把老的asp系统彻底修改为asp.net来得快很多,以前的程序有的是稳定运行了很多年,经过很多细节的改进等,不是1-2天就可以转到asp.net上来,但是集成一下通用权限管理系统的单点登录功能,可能1-2天就可以集成好了,因为不需要对原来的系统进行翻天覆地的修改。
asp 里可以很方便的读取到下面的所有参数,开发各种应用系统中常需要的参数也基本上足够可以调用了。
下面的代码为参考代码:有些太简单了一些毕竟是部分代码开发而已,商业化的还是跟这个有些差别,就算是给大家提供一个参考吧。
2 <html>
3 <head>
4 <meta http-equiv= " Content-Type " content= " text/html; charset=UTF-8 ">
5 <title>DotNet 单点登录的例子</title>
6 </head>
7 <body>
8 <%
9 Response.CodePage= 65001
10 Response.Charset= " UTF-8 "
11
12 ' 获取当前用户的主键
13 FUNCTION GetUserId()
14 ' 获得各种属性,就一行代码就可以了,同时会进行登录验证
15 GetUserId = GetUser( " Id ")
16 END FUNCTION
17
18 FUNCTION GetUserRealName()
19 ' 获得各种属性,就一行代码就可以了,同时会进行登录验证
20 GetUserRealName = GetUser( " RealName ")
21 END FUNCTION
22
23
24 ' 判断当前用户是否已经进行了登录
25 FUNCTION Authentication()
26 userId = GetUserId()
27 IF ISNULL(userId) = FALSE THEN
28 Response.Write " 单点登录验证成成功<br> "
29 Response.Write " 当前用户主键为: " + userId + " <br> "
30 END IF
31 realName = GetUserRealName()
32 IF ISNULL(userId) = FALSE THEN
33 Response.Write " 当前用户姓名为: " + realName + " <br> "
34 END IF
35 END FUNCTION
36
37
38 ' 单点登录(Single Sign On , 简称 SSO )
39 FUNCTION GetUser(key)
40 userProperty = NULL
41 ssoURL = " http://localhost/DotNet.WebForm/LogOn.aspx "
42 SET userCookies = request.Cookies()
43 ' 如果Cookies为空,则说明没登录,调回统一身份认证系统首页,重新登录。
44 IF LEN(userCookies) <= 0 THEN
45 Response.Redirect(ssoURL + " ?ReturnURL=http://localhost/asp/Default.asp ")
46 ELSE
47 FOR EACH cookie IN userCookies
48 IF (cookie = " DotNet ") THEN
49 dotNetCookie = Request.Cookies(cookie)
50 userProperty = Request.Cookies(cookie)(key)
51 EXIT FOR
52 END IF
53 NEXT
54 END IF
55 IF ISNULL(dotNetCookie) = TRUE OR dotNetCookie = "" THEN
56 Response.Redirect(ssoURL + " ?ReturnURL=http://localhost/asp/Default.asp ")
57 END IF
58 ' 这里是处理返回值
59 GetUser = userProperty
60 END FUNCTION
61
62 ' 获取当前用户的主键,验证用户是否已进行登录操作
63 Authentication()
64 ' 列出所有的能获得的参数
65 GetCookies()
66
67
68 ' 测试函数,获取用户所有的Cookies
69 FUNCTION GetCookies()
70 Response.Write " <br><br><br> 读取当前浏览器中的Cookie:<br> "
71
72 DIM cookie,key
73 FOR EACH cookie IN Request.Cookies
74 IF Request.Cookies(cookie).haskeys THEN
75 Response.Write " <br>Cookie 名字: "&cookie& " <BR>--------------<BR> "
76
77 FOR EACH key IN Request.Cookies(cookie)
78 Response.Write " Key 名字: "&key& " ,值: "&Request.Cookies(cookie)(key)& " <BR> "
79 NEXT
80 ELSE
81 Response.Write " Cookie 名字: "&Request.Cookies(cookie)& " <BR> "
82 END IF
83 NEXT
84 END FUNCTION
85
86 %>
87
88 </body>
89 </html>