[英]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")));
這就是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.