簡體   English   中英

Cas和Spring示例:我不理解“ setUserDetailsS​​ervice”

[英]Cas and Spring example: I don't understand “setUserDetailsService”

在此示例中: https : //www.baeldung.com/spring-security-cas-sso

有這段代碼:

@Bean
public CasAuthenticationProvider casAuthenticationProvider() {

    CasAuthenticationProvider provider = new CasAuthenticationProvider();
    provider.setServiceProperties(serviceProperties());
    provider.setTicketValidator(ticketValidator());
    provider.setUserDetailsService(
      s -> new User("casuser", "Mellon", true, true, true, true,
        AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
    provider.setKey("CAS_PROVIDER_LOCALHOST_9000");
    return provider;
}

我不明白這部分內容:

provider.setUserDetailsService(
      s -> new User("casuser", "Mellon", true, true, true, true,
        AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
  1. 我們應該在這里放什么? 我是否應該創建自己的UserDetailsS​​ervice(如果是,如何?)? 我被期望一些“默認的cas用戶詳細信息服務” ...
  2. 該代碼如何工作? 創建用戶以提供UserDetailsS​​ervice?

這就是Spring安全性在更高層次上的工作方式。

用戶嘗試通過某種類型的UI(例如,CAS的一部分)進行身份驗證。 用戶界面將用戶名/密碼傳遞給Spring。 Spring最終將調用UserDetailService.loadUserByUsername並將用戶名傳遞給它,如果用戶存在,則UserDetailService將返回非null的UserDetails 在空的情況下UserDetails或非空一個不同的密碼,Spring將無法通過驗證。

CAS只是一個身份驗證服務器,它保留了用戶的存儲方式。 您可以選擇使用LDAP或數據庫。 該選擇基於UserDetailService不同實現。 再次查看javadoc 它具有您可以使用的默認實現的列表。

請參閱鏈接教程的第5部分。 它顯示了如何更改CAS和Spring Boot應用程序以將數據庫用作用戶存儲。 這里的關鍵是,為了使后端可以與CAS服務器一起針對存儲在數據庫中的用戶使用,都需要進行適當的配置,以便針對數據庫查找用戶。 CAS是通過application.properties配置的,而Spring是通過UserDetailService

現在在評論中向您的問題提問:

客戶為什么要為cas服務器如何存儲用戶而煩惱?

客戶端不應理會UserDetailService 它僅由CAS保護的后端服務使用。

只是為了確保我緊緊抓住它:如果我只需要知道“該用戶是否已連接?” 那么CAS就足夠了,我將永遠不會使用UserDetailService。 但是,如果我需要有關用戶的一些信息(姓名,電話等),則可以調用UserDetailService進行加載(從db,ldap或其他任何方式)。

是的,沒有。 您不需要將密碼存儲在UserDetails但是您需要能夠為成功的CAS身份驗證用戶返回UserDetails 請參閱您的鏈接教程中的這一部分:

再次注意,服務器使用的數據庫中的主體必須與客戶端應用程序的主體相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM