簡體   English   中英

Spring Security 的 AuthenticationManager 中 UserDetailsService 的作用是什么?

[英]What is the role of UserDetailsService in AuthenticationManager from Spring Security?

我正在嘗試創建一個登錄頁面,如果登錄成功,則返回 JWT 但我不明白某些功能是如何工作的。 我目前正在關注一個很好的 JWT 身份驗證教程,其中作者創建了一個“/login”端點,如下所示:

@PostMapping("/login")
public String login(@RequestBody LoginUserDto loginUser) {
    try{
      authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(//email,//password));
    }catch(BadCredentialsException exception) {....}

    final UserDetails userDetails = userDetailsService.loadUserByUsername(//email);
    return createToken(userDetails.getUsername());     
}

如果authenticate()方法沒有拋出任何BadCredentialsException ,他為什么還要調用userDetailsService.loadUserByUsername()

無論如何,我已經看到這個userDetailsService是在WebSecurityConfigurerAdapter class 中配置的:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userService)
            .passwordEncoder(NoOpPasswordEncoder.getInstance());
}

但同樣,如果他使用AuthenticationManager ,這個UserDetailsService的目的是什么? 因為我幾乎在每個教程中都看到了我需要實現這個接口......

UserDetailsService用於從后端結構(如數據庫)加載用戶。 當用戶嘗試使用用戶名和密碼登錄時,將調用loadUserByUsername方法。 loadUserByUsername方法返回一個UserDetails object ,您可以在其中獲取用戶的身份驗證和授權信息(來自域用戶的更具體信息,例如:員工編號、全名)。 因此,您可能需要它在應用程序流程中進行更詳細的使用,例如了解用戶全名是否符合邏輯。 調用authenticationManager.authenticate你可以檢查提供者的憑據(LDAP、數據庫、OAUTH 等)。

創建自定義UserDetailsService ervice object 是一種簡單的機制,它允許Spring Security根據您的自定義域 model 做出安全決策。 Spring Security需要UserDetailsService ervice 才能使用內置的記住我支持和UserDetailsService ervice object 在身份驗證不基於用戶名和密碼時不起作用。

暫無
暫無

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

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