๐Ÿ” AuthenticationProvider ์ปค์Šคํ…€ ๊ตฌํ˜„ ์ •๋ฆฌ

๊น€์ •๊ทœยท2025๋…„ 6์›” 19์ผ

โœ… AuthenticationProvider๋ž€?

Spring Security์—์„œ ์‹ค์ œ ์ธ์ฆ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ

  • ์‚ฌ์šฉ์ž์˜ ID/PW ๋˜๋Š” JWT ํ† ํฐ ๋“ฑ์œผ๋กœ๋ถ€ํ„ฐ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ 
  • ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด(Authentication)๋ฅผ ๋ฐ˜ํ™˜ํ•จ
  • ๋‹ค์–‘ํ•œ ์ธ์ฆ ๋ฐฉ์‹์„ Provider๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ (์˜ˆ: Form Login, JWT, OAuth2 ๋“ฑ)

๐Ÿง  ๋™์ž‘ ๊ตฌ์กฐ ์š”์•ฝ

AuthenticationManager
      โ†“ (delegates)
AuthenticationProvider(s)
      โ†“
authenticate() ์ˆ˜ํ–‰ โ†’ ์„ฑ๊ณต ์‹œ Authentication ๊ฐ์ฒด ๋ฐ˜ํ™˜
  • AuthenticationManager๋Š” ์—ฌ๋Ÿฌ Provider ์ค‘ ํ•˜๋‚˜์— ์œ„์ž„ํ•˜์—ฌ ์ธ์ฆ ์ˆ˜ํ–‰
  • supports() ๋ฉ”์„œ๋“œ๋กœ ์–ด๋–ค ํƒ€์ž…์˜ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ• ์ง€ ํŒ๋‹จ

๐Ÿ”ง ์ปค์Šคํ…€ ๊ตฌํ˜„ ์˜ˆ์‹œ (JWT ๊ธฐ๋ฐ˜)

@Component
public class JwtAuthenticationProvider implements AuthenticationProvider {

    private final UserDetailsService userDetailsService;
    private final JwtTokenProvider jwtTokenProvider;

    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String token = (String) authentication.getCredentials();
        String username = jwtTokenProvider.getUsername(token);

        UserDetails userDetails = userDetailsService.loadUserByUsername(username);
        if (!jwtTokenProvider.validateToken(token, userDetails)) {
            throw new BadCredentialsException("Invalid JWT token");
        }

        return new UsernamePasswordAuthenticationToken(userDetails, token, userDetails.getAuthorities());
    }

    public boolean supports(Class<?> authentication) {
        return JwtAuthenticationToken.class.isAssignableFrom(authentication);
    }
}

โš™ JwtAuthenticationToken ํด๋ž˜์Šค ์˜ˆ์‹œ

public class JwtAuthenticationToken extends UsernamePasswordAuthenticationToken {
    public JwtAuthenticationToken(String token) {
        super(null, token);
    }
}

๐Ÿงฉ ์—ฐ๋™ ๊ตฌ์กฐ ์š”์•ฝ

  1. JWT ํ•„ํ„ฐ์—์„œ ํ† ํฐ ์ถ”์ถœ
  2. JwtAuthenticationToken์„ ์ƒ์„ฑํ•˜์—ฌ AuthenticationManager์— ์ „๋‹ฌ
  3. AuthenticationManager โ†’ JwtAuthenticationProvider๋กœ ์œ„์ž„
  4. Provider์—์„œ ๊ฒ€์ฆ ํ›„, ์ธ์ฆ ์™„๋ฃŒ๋œ Authentication ๊ฐ์ฒด ๋ฐ˜ํ™˜
  5. SecurityContextHolder์— ์ €์žฅ

๐Ÿง  ๋ฉด์ ‘์šฉ ์ •๋ฆฌ ๋ฉ˜ํŠธ

โ€œAuthenticationProvider๋Š” Spring Security์—์„œ ์‹ค์งˆ์ ์ธ ์ธ์ฆ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ๊ฒฝ์šฐ ์ปค์Šคํ…€ Provider๋ฅผ ๊ตฌํ˜„ํ•ด ํ† ํฐ์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ณ ,
์ธ์ฆ๋œ Authentication ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•จ์œผ๋กœ์จ ์œ ์—ฐํ•œ ์ธ์ฆ ๋ฐฉ์‹์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.โ€

profile
๊ธฐํš๊ณผ ์„ค๊ณ„ ๊ทธ๋ฆฌ๊ณ  ๊ตฌํ˜„๊นŒ์ง€ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€