CAS
, Radius authen
此篇只會介紹關於CAS Server在搭配Radius認證時所需要的配置,以及遇到的一些雷點,關於Radius Server本身怎麼架設並不會過多描述。
先附上CAS社群文件:
Radius Authentication[1]
Radius Configuration[2]
附上實際上application.xml的設定配置:
這邊需要解釋一下為何只需要設定cas.authn.radius.client的部分:
由於在實作時,並沒有架設一層nas或者vpn,如果今天在CAS Server的環境下有架設vpn or nas去專門連到Radius Server,那麼架構應該會像這篇文[3]當中那樣,CAS Server會先打到vpn、nas或等等其他的中間層,這個中間層再跟Radius Server溝通。那麼這個時候就需要去設定cas.authn.radius.servere的部分了。
再次提醒,cas.authn.radius.client是去設定實際Radius Server的相關設定!!
雖然以Radius架構的觀點來說,CAS Server其實就是Radius client的腳色,有可能會誤會需要將Radius Serveer的設定寫在cas.authn.radius.server之中。
關於設定Radius Authen踩過一些雷,這邊統一紀錄一下:
根據社群內部文件,只設定compile "org.apereo.cas:cas-server-support-radius:${project.'cas.version'}"
是不夠的,因為不知為何,在gradle compile過後,最核心的jradius套件並不會下載下來,而且也不會出錯,只有等到server啟動之後,才會發現怎麼噴exception出來。
所以還需要手動加入幾個套件,但請別加入github.coova開頭的,因為compile "org.apereo.cas:cas-server-support-radius:${project.'cas.version'}"
就是引用了com.github.coova.jradius
,但卻沒抓下來jradius的罪魁禍首…
請加入以下套件:
解決完第一點後,還發生了明明輸入了正確的帳號密碼,radius client也回傳帳號驗證成功,但在前端顯示卻出現invalid authentication,追查原始碼後可以發現在帳號驗證通過後,會觸發一個trigger classRadiusAccessChallengedMultifactorAuthenticationTrigger.java
,裡面會檢查是否有提供mfa provider的機制,如果沒有的話,即便帳號密碼驗證通過了,還是會直接噴error出來。
因此還需要加入一個插件來解決mfa provider,請加入: compile "org.apereo.cas:cas-server-support-radius-mfa:${project.'cas.version'}"
,這樣就能解決mfa provider為空導致出錯的問題。
這邊也提供當初找很久終於找到一篇相關的討論,在此附上連結。
如果連不上radius server,請確認是否有配置白名單
[1] Radius Authentication
[2] Radius Configuration
[3] 架設Radius伺服器實務
[4] Radius Authentication seems not work if MFA is not enabled on CAS 6.1.x, is that intended?