最近開始接觸做與其它認證系統的集成,其中有個是與某學校的CAS服務器集成。cas服務器認證成功后返回的數據格式如下:

其中紅色部分是我需要取出來用於識別用戶身份的數據。
一開始,我根據網上的教程,引用了DotNetCasClient.dll,並對web.config進行了一些配置,首先,在configuration配置節下,增加紅色部分內容,主要是對cas做一些基本的配置


配置完成后,在登錄頁面,我們通過如下方式獲取用戶數據

所有工作做完以后,發現問題來了,登錄以后,我方系統根本就無法獲取到Assertion.Attributes里的東西,這里面總是空的。后來在網上包含baidu和google進行了查詢都未能找到解決辦法。無奈,可好跟蹤源代碼了。所以,我從 https://github.com/apereo/dotnet-cas-client 上下載了源代碼,並新創建了一個新的最簡單的測試站點。
經過跟蹤源代碼后發現,原來,我方收到的數據是正確的,但是在DotNetCasClient 進行反序列化的時候,把<cas:atrributes>及節點下的所有數據都丟失了。所以默認可能取到<cas:user>節點下的數據。
為了實現DotNetCasClient 能獲取到<cas:attributes>我們必須對源代碼進行改進。具體改動點如下:

通過這樣子的改造,在應用程序中,我們的Assertion.Attributes里就有值了,然后我們就可以使用這里面的值,做一些與業務相關的操作和驗證。
本人極少寫博客,但這個問題感覺網上的答案比較少,特別是.net方面的,所以特寫此記錄,以期能對遇到同樣問題的朋友有所幫助。
