通用權限管理系統組件 (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 里可以很方便的讀取到下面的所有參數,開發各種應用系統中常需要的參數也基本上足夠可以調用了。

 

下面的代碼為參考代碼:有些太簡單了一些畢竟是部分代碼開發而已,商業化的還是跟這個有些差別,就算是給大家提供一個參考吧。

 1 <%@  language= " VBSCRIPT " codepage= " 65001 " %>
 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>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM