中央認證服務 (CAS)


中央認證服務 (CAS) 是一個開源平臺,它為 Web 應用和服務提供單點登入 (SSO) 認證。這意味著使用者只需登入一次即可訪問多個應用程式和服務,無需多次提供其憑據。CAS 廣泛應用於教育機構和其他組織,以簡化訪問基於 Web 的資源的過程。

CAS 概述

CAS 基於 SAML 規範,並提供了一種集中式使用者認證方式。它由兩個主要元件組成:CAS 伺服器和 CAS 客戶端。CAS 伺服器負責對使用者進行身份驗證併為其提供服務票證,該票證作為身份驗證的證明。CAS 客戶端整合到 Web 應用程式或服務中,負責向 CAS 伺服器請求服務票證並驗證它們。

CAS 伺服器

CAS 伺服器負責處理使用者身份驗證並頒發服務票證。它可以使用多種方法對使用者進行身份驗證,例如 LDAP、Kerberos 和資料庫身份驗證。CAS 還支援使用不同的 MFA 提供商(例如 Google、Yubikey 等)進行多因素身份驗證 (MFA)。

CAS 使用簡單的協議與 CAS 客戶端進行通訊。客戶端向 CAS 伺服器傳送服務票證請求,這會提示使用者進行身份驗證。使用者透過身份驗證後,CAS 伺服器會頒發服務票證,然後將其傳送回客戶端。

CAS 客戶端

CAS 客戶端整合到 Web 應用程式或服務中,負責向 CAS 伺服器請求服務票證並驗證它們。它是一個簡單的庫,可以新增到任何用任何程式語言編寫的 Web 應用程式或服務中。

CAS 客戶端使用服務票證來請求訪問 Web 應用程式或服務的受保護資源。CAS 伺服器驗證服務票證,如果有效,則授予客戶端訪問受保護資源的許可權。

代理

CAS 支援代理,允許 CAS 服務充當另一個服務的代理。這允許一層間接性,客戶端向 CAS 服務進行身份驗證,然後 CAS 服務代表客戶端向目標服務進行身份驗證。這在目標服務不支援 CAS 身份驗證或客戶端由於某種原因無法向目標服務進行身份驗證的情況下非常有用。

要使用代理,必須將 CAS 伺服器和目標服務配置為相互信任,並且客戶端必須從 CAS 伺服器請求代理授權票證 (PGT)。然後使用 PGT 從 CAS 伺服器請求代理票證,該票證可用於訪問目標服務。

委託身份驗證

CAS 還支援委託身份驗證,允許客戶端使用與 CAS 服務提供的身份驗證機制不同的身份驗證機制向 CAS 服務進行身份驗證。這在客戶端已向其他服務進行身份驗證並希望使用該身份驗證訪問受 CAS 保護的服務的情況下非常有用。

委託身份驗證是使用一種稱為代理身份驗證票證 (PAT) 的特殊型別的服務票證來完成的。在客戶端向委託身份驗證服務進行身份驗證後,CAS 伺服器會頒發 PAT。然後,客戶端可以向 CAS 伺服器出示 PAT 以請求受 CAS 保護的服務的服務票證。

登出

CAS 提供對單點登出 (SLO) 功能的支援。它允許使用者一次登出所有服務,而不是分別登出每個服務。一旦使用者登出任何啟用 CAS 的服務,它就會向 CAS 伺服器傳送登出請求,CAS 伺服器又會向該使用者已登入的所有其他服務傳送登出請求。這樣,使用者已登入的所有服務都會立即登出。

要在 CAS 伺服器上啟用單點登出功能,您必須在應用程式伺服器上配置 LogoutFilter、SingleSignOutFilter 和 SingleSignOutHttpSessionListener。

CAS 屬性

CAS 還支援釋出使用者屬性,這些屬性可用於攜帶有關已認證使用者的附加資訊。CAS 客戶端可以使用這些屬性來做出授權決策或個性化使用者體驗。CAS 屬性以鍵值對的形式返回,並且可以在 CAS 服務票證驗證過程中請求。

總的來說,CAS 是一個強大、靈活且功能豐富的 SSO 身份驗證解決方案,可以輕鬆整合到任何 Web 應用程式或服務中。雖然這些功能根據用例和業務需求可能會有所幫助,但瞭解如何正確使用和配置它們非常重要。

示例

以下是如何使用 CAS 客戶端庫將 CAS 身份驗證新增到 Java Web 應用程式的示例:

import org.jasig.cas.client.authentication.AuthenticationFilter; import org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter; ... public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CasProperties casProperties; @Autowired private CasAuthenticationProvider casAuthenticationProvider; @Override protected void configure(HttpSecurity http) throws Exception { http .addFilter(casAuthenticationFilter()) .addFilter(casValidationFilter()) .addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class); } private AuthenticationFilter casAuthenticationFilter() { AuthenticationFilter filter = new AuthenticationFilter(); filter.setCasServerUrlPrefix(casProperties.getServerUrlPrefix()); filter.setServerName(casProperties.getServerName()); return filter; } private Cas20ProxyReceivingTicketValidationFilter casValidationFilter() { Cas20ProxyReceivingTicketValidationFilter filter = new Cas20ProxyReceivingTicketValidationFilter(); filter.setCasServerUrlPrefix(casProperties.getServerUrlPrefix()); filter.setTicketValidator(new Cas20ServiceTicketValidator(casProperties.getServerUrlPrefix())); filter.setAuthenticationUserDetailsService(new UserDetailsByNameServiceWrapper<>(new RemoteUserDetailsService(casProperties))); return filter; } private Cas20ServiceTicketValidator cas20ServiceTicketValidator() { return new Cas20ServiceTicketValidator(casProperties.getServerUrlPrefix()); } private AuthenticationUserDetailsService authenticationUserDetailsService() { return new UserDetailsByNameServiceWrapper<>(new RemoteUserDetailsService(casProperties)); } }

在此示例中,我們使用 CAS 客戶端庫中的 AuthenticationFilter 和 Cas20ProxyReceivingTicketValidationFilter 類來處理服務票證的身份驗證和驗證。我們還有其他類,例如 Cas20ServiceTicketValidator、authenticationUserDetailsService,它們正在被例項化。

我們還使用 CasProperties bean,其中包含 CAS 伺服器和客戶端的配置資訊。這允許我們輕鬆配置伺服器 URL 字首和伺服器名稱,用於身份驗證過濾器和驗證過濾器。

我們還添加了過濾器 singleSignOutFilter,它將負責單點登出功能,並將新增到 CasAuthenticationFilter 之前。

結論

CAS 是一個強大且廣泛使用的解決方案,可為 Web 應用程式和服務提供 SSO 身份驗證。它易於整合到任何 Web 應用程式或服務中,並支援各種身份驗證方法和協議。藉助 CAS,使用者只需登入一次即可訪問多個應用程式和服務,無需多次提供其憑據,這使得系統更安全、更易於管理,並且更不容易出現使用者錯誤。

更新於:2023年1月16日

759 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.