數通暢聯某綜合SOA集成項目的統一身份認證工作,需要第三方系統配合進行單點登錄的配置改造,在項目中有需要進行單點登錄配置的.NET應用系統,本文專門記錄.NET應用和AEAI CAS的集成過程步驟,為後續類似的統一認證配置實現提供參考指導。
數通暢聯新員工
廣大技術愛好者
操作系統:Windows Server 2008
第三方系統.NET Framework 版本:V4.0
AEAI CAS:是數通暢聯基於開源Jasig CAS擴展開發提供的統一認證平台,經過多年的實踐和積累,通過提供統一的認證服務、授權服務、集中管理用戶信息;AEAI CAS統一身份認證平台功能包括:賬號同步模塊及接口、單點登錄客戶端配置、賬號密碼管理功能。AEAI CAS的功能架構如下圖:
.Net: .NET是微軟的新一代技術平台,為敏捷商務構建互聯互通的應用系統,這些系統是基於標准的,聯通的,適應變化的,穩定的和高性能的。從技術的角度,一個.NET應用是一個運行於.NET Framework之上的應用程序。如果一個應用程序跟.NET Framework無關,它就不能叫做.NET程序。比如,僅僅使用了XML並不就是.NET應用,僅僅使用SOAP SDK調用一個Web Service也不是.NET應用。.NET是基於Windows操作系統運行的操作平台,應用於互聯網的分布式。
在進行CAS認證配置前,需要先添加CAS 的客戶端文件即相關的動態鏈接庫.dll文件,放置於.NET應用的bin目錄,如下圖:
在修改web.config文件之前,先了解web.config文件中一些標簽的含義。
Web.config 文件是一個XML文本文件,它用來儲存 ASP.NET Web 應用程序的配置信息(如最常用的設置ASP.Net Web 應用程序的身份驗證方式),它可以出現在應用程序的每一個目錄中。當你通過.NET新建一個Web應用程序後,默認情況下會在根目錄自動創建一個默認的Web.config文件,包括默認的配置設置,所有的子目錄都繼承它的配置設置。如果你想修改子目錄的配置設置,你可以在該子目錄下新建一個Web.config文件。它可以提供除從父目錄繼承的配置信息以外的配置信息,也可以重寫或修改父目錄中定義的設置。
配置節的每一節
根元素,其它節都是在它的內部.
此節用於定義應用程序設置項。對一些不確定設置,還可以讓用戶根據自己實際情況自己設置
例如:
I. 定義了一個連接字符串常量,並且在實際應用時可以修改連接字符串,不用修改程式代碼.
<appSettings>
<add key="SystemCode" value="CM"/>
II. 定義了一個頁面.
<appSettings>
<add key="KeepAlivePage" value="default.aspx?ping=y"/>
<appSettings>
<compilation debug="true" defaultLanguage="c#" targetFramework="4.0" >
debug : 為true時,啟動aspx調試;為false不啟動aspx調試,因而可以提高應用程序運行時的性能。一般程序員在開發時設置為true,交給客戶時設置為false.
default language: 定義後台代碼語言,可以選擇C#和VB.net兩種語言.
targetFramework是VS2010識別的指令
<customErrors mode="Off"/>
mode : 具有On,Off,RemoteOnly 3種狀態。On表示始終顯示自定義的信息; Off表示始終顯示詳細的asp.net錯誤信息; RemoteOnly表示只對不在本地Web服務器上運行的用戶顯示自定義信息.
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" fileEncoding="utf-8" />
requestEncoding: 它用來檢查每一個發來請求的編碼.
responseEncoding: 用於檢查發回的響應內容編碼.
fileEncoding: 用於檢查aspx,asax等文件解析的默認編碼.
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="UseCookies" timeout="120" regenerateExpiredSessionId="true"/>
mode: 分為off,Inproc,StateServer,SqlServer幾種狀態
stateConnectionString :指定Asp.net應用程序存儲遠程會話狀態的服務器名,默認為本機
cookieless: 設置為true時,表示不使用cookie會話狀態來標識客戶;否則,相反.
timeOut: 用來定義會話狀態存儲的時間,超過期限,將自動終止會話.
regenerateExpiredSessionId: 指定當客戶端指定了過期的會話 ID 時是否重新發出會話 ID。默認情況下,當啟用了 regenerateExpiredSessionId 時,僅為 cookieless 模式重新發出會話 ID。
<authentication mode="Forms">
<forms
loginUrl="http://localhost:8080/cas/login"
timeout="30"
defaultUrl="~/Main.aspx"
cookieless="UseCookies"
slidingExpiration="true" />
</authentication>
Ø Windows: 使用IIS驗證方式
Ø Forms: 使用基於窗體的驗證方式
Ø Passport: 采用Passport cookie驗證模式
Ø None: 不采用任何驗證方式
<authentication mode="Forms" >
<forms loginUrl="logon.aspx" name=".FormsAuthCookie"/>
</authentication>
其中元素loginUrl表示登陸網頁的名稱,name表示Cookie名稱。
<authorization>
<deny users="?"/>
</authorization>
注:你可以使用user.identity.name來獲取已經過驗證的當前的用戶名
為當前應用程序配置會話狀態設置(如設置是否啟用會話狀態,會話狀態保存位置)。
<sessionState mode="StateServer" cookieless="UseCookies" timeout="120" />
mode=" StateServer "表示:在本地儲存會話狀態(你也可以選擇儲存在遠程服務器或SAL服務器中或不啟用會話狀態)
cookieless=" UseCookies " 表示:無論浏覽器或設備是否支持 Cookie,都使用 Cookie 來保留用戶數據。
timeout="120"表示:會話可以處於空閒狀態的分鐘數
在web.config中添加CAS的相關配置信息
<section name="casClientConfig" type="DotNetCasClient.Configuration.CasClientConfiguration, DotNetCasClient"/>
<casClientConfig
casServerLoginUrl="http://localhost:8080/cas/login"
casServerUrlPrefix="http://localhost:8080/cas/"
serverName="http://YourIP:Port/ExampleWebsite"
redirectAfterValidation="true"
gateway="false"
renew="false"
singleSignOut="true"
ticketTimeTolerance="5000"
ticketValidatorName="Cas20"
proxyTicketManager="CacheProxyTicketManager"
serviceTicketManager="CacheServiceTicketManager"
gatewayStatusCookieName="CasGatewayStatus" />
黃色為CAS認證服務地址
綠色為第三方系統登錄地址
<authentication mode="Forms">
<forms
loginUrl="http://localhost:8080/cas/login"
timeout="30"
defaultUrl="~/Main.aspx"
cookieless="UseCookies"
slidingExpiration="true"
/>
</authentication>
<authorization>
<deny users="?" />
</authorization>
注:authorization和authentication需要一起使用才有效果
<remove name="DotNetCasClient"/>
<add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
<add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
問題一:配置後,經過單點登錄的攔截遇到循環重定向問題
解決:
問題二:登錄系統時的URL後需要添加“/”才能進入,否則出現循環重定向的問題
解決:去掉path屬性解決問題
<authentication mode="Forms">
<forms
loginUrl="http://localhost:8080/cas/login"
timeout="30"
defaultUrl="~/Main.aspx"
cookieless="UseCookies"
slidingExpiration="true"
path=”/XXXX/”
/>
</authentication>
統一身份認證配置完畢後需要,需要在.NET的C#中獲取登錄用戶名,可以采用如下方式來獲取:
string userName = HttpContext.Current.User.Identity.Name;
http://www.cnblogs.com/doublemm/archive/2011/08/25/2153235.html
http://www.cnblogs.com/xinhaijulan/archive/2010/08/21/1805116.html
附件為配置所需動態鏈接庫文件、完整的web.config樣例文件以及樣例工程用於參考,其中:DotNetCasClient是CAS的的C#工程,ExampleWebSite是樣例工程,對應實際項目。
文檔及附件下載https://pan.baidu.com/s/1dFGDkzv