12312312

Seung jun Cha·2024년 7월 18일
0

인덱스 -> 토큰값(인덱스키) : 사용지아이디 lll 주어진 리프레시 토큰 값으로 사용자 ID를 빠르게 찾기 위해서입니다., 리프레시 토큰 값이 인덱스가 되고, 이 인덱스를 통해 사용자 ID를 조회
해시테이블 -> 사용자아이디(해시키) : 토큰 ll 사용자 ID를 기준으로 여러 속성(여기서는 리프레시 토큰 값과 TTL)을 저장

인덱스가 없을떄 발생하는 문제

  • 리프레시 토큰 값으로 사용자 ID를 조회하려면 모든 저장된 리프레시 토큰을 순차적으로 검색해야 합니다.
  • 특정 토큰 값으로 사용자 ID를 찾기 위해 모든 토큰을 검색해야 합니다.

해시테이블이 없을때 문제

  • 사용자 ID와 관련된 여러 속성을 저장할 때, 각 속성을 개별적으로 관리해야 합니다.
  • 사용자 ID를 키로 사용하지 않고 개별적으로 리프레시 토큰과 TTL을 저장할 경우, 이 데이터들을 갱신하거나 삭제할 때 각각의 데이터를 모두 찾아서 처리해야 합니다.
  • TTL을 각 속성에 개별적으로 적용하기 어려워집니다.

사용자가 입력한 아이디와 비밀번호를 가지고 있는 UsernamePasswordAuthenticationToken 객체 생성

AuthenticationManager는 ProviderManager에게 인증을 위임(일반적으로 DaoAuthenticationProvider에게 위임)

DaoAuthenticationProvider는 데이터베이스를 사용하여 사용자 정보를 조회하여 인증을 처리합니다.

UserDetailsService 인터페이스를 사용하여 사용자의 정보를 데이터베이스에서 가져옵니다. (여기선 아이디만 가져가서 사용자 정보를 가져옴
이렇게 가져온 사용자 정보에는 아이디, 비밀번호 등이 있음)
=> 사용자 정보(아이디, 비밀번호 등이 들어있는)를 UserDetails 객체로 만들어서 반환 ( UserDetails 객체는 사용자의 아이디, 비밀번호, 권한 정보 등을 포함)

DaoAuthenticationProvider는 loadUserByUsername 메서드에서 반환된 UserDetails 객체와 클라이언트가 제공한 비밀번호를 비교하여 사용자를 인증
=> 클라이언트가 제공한 비밀번호가 UserDetails에 있는 비밀번호와 일치하면 인증이 성공합니다.

AuthenticationProvider는 인증된 사용자를 나타내는 Authentication 객체를 생성합니다. ( 인증된 사용자의 정보가 포함되어 있습니다.)

이 정보는 Spring Security의 SecurityContextHolder에 설정됩니다.

0개의 댓글