新版本cas介紹(6..0-rc4)
簡介
central authentication service (cas),通常稱為cas。 cas是一種針對web的企業多語言單點登入解決方案,並嘗試成為您的身份驗證和授權需求的綜合平台。
下面是cas(6.0.x)官方的一段簡述:
相較於老版本cas(4.1.7),新版本cas增加了更豐富的功能支援。
以下將分別從cas的構建、單點登入(登出)、高可用架構、密碼管理、oauth認證、服務管理、個性化登入介面、多因素認證等方面進行詳細介紹。
cas服務構建
注意:
工程構建
git clone
修改cas-overlay-template-master/gradle.properties檔案,指定構建cas服務的版本:
通過gradle tasks面板進行服務構建。若該頁簽無任務,可以嘗試重新整理。
構建完成的工程,將會生成在cas-overlay-template-master/build/libs路徑下。
將此工程發布至tomcat,即可通過web介面進行訪問,http://ip:port/cas。
單點登入(登出)
單點登入、單點登出是cas的核心功能,主要用於使用者的認證。cas預設提供從本地json獲取使用者認證資料,預設使用者名稱及密碼為casuser/mellon。目前認證的方式支援ldap、database、x.509、spnego、jaas、jwt、radius、mongodb等多種方式。本例中,將採用mysql資料庫作為認證資料儲存的方式。因此,需要建立資料庫、資料庫表,資料庫表至少包含username、password或類似功能字段。使用者表中password欄位支援多種加密方式,包含:none、default、standard、bcrypt、scrypt、pbkdf2、自定義(需要額外編碼)等多種加密方式。本例採用default md5對password進行加密。
工作原理
cas的認知支援多種協議,包含:cas, saml, ws-federation, oauth2, openid, openid connect, rest等。預設採用的為cas協議,目前cas協議有1.0、2.0、3.0三個版本。本例將以最常用的cas 2.0協議為基礎進行原理的介紹。
以上為官方提供的單點登入時序圖,分為以下三種場景:應用首次登入、應用再次登入、應用2首次登入。主要原理是通過url的重定向、cookie、session等功能來實現使用者認證。
關於單點登出,預設cas服務也支援單點登出。在某乙個應用登出後,會將cas server端的tgt刪除,同時cas server會向對應tgt驗證的其他應用發起logout請求。整理需要注意,cas server僅會傳送logout請求,應用攔截到logout後,需要自己完善使用者的logout邏輯,用以實現使用者登出。其原理參考下圖:
工程構建
使用mysql作為認證資料來源,需要在cas-overlay-template-master/build.gradle檔案中增加以下配置資訊,用以支援資料庫認證。
其中cas.authn.jdbc.query[0].sql屬性用以配置通過使用者名稱查詢密碼的sql,cas.authn.jdbc.query[0].fieldpassword屬性用以指定密碼字段。cas.authn.jdbc.query[0].passwordencoder相關屬性用以指定密碼欄位的加密方式。
通過gradle tasks面板構建並發布服務。訪問cas服務介面,可以通過mysql資料庫中儲存的使用者名稱和密碼進行登入。
單點登入(登出)配置
單點登入樣例
單點登出樣例
identityserver4 V4 新版本踩坑
identityserver4 的版本前段時間更新到v4,和之前的版本,還是有一些使用的差異 1.api資源宣告,之前版本用的是apiresource,新版本用的是apiscope,從名字就可以看出區別,新版是用 scope 區分的 新版本 public static ienumerableapis...
新版本IdentityServer4踩坑
1.報錯 invalid request 新版本已經將form data方式改為x www form urlencoded 2.報錯 invalid request 新版本範圍定義發生了改變 public static ienumerablegetapiresources 新增了紅色部分,另外還需要...
請使用Oracle新版本驅動
今天使用apache dbutils連線oracle10g時,後台報錯提示 不支援的屬性.比較納悶,檢視一下源 發現有這麼一句 parametermetadata pmd stmt.getparametermetadata 執行這句話報錯了。經排查發現,原來是oracle jdbc驅動的問題。我用的...