[ TIL ] 20240201

선호·2024년 2월 1일
0

TODO

  • 알고리즘
    - [ ] sql 3문제 풀기
  • Spring
    - [ ] spring security 복습, 파고들기

복기

인증 인가

인증 : 해당 유저가 실질적으로 존재하는 유저인지 증명하는것
인가 : 어떠한 리소스에 접근을 하려고 할 때 접근이 가능한지 확인 하는 것.

Session vs JWT

  • 세션 : DB에 저장됨
  • JWT : 서버에 저장되지 않고 클라이언트가 토큰을 가지고 있음.

Util

  • Util 클래스란 특정 매개 변수(파라미터)에 대한 작업을 수행하는 메서드들이 존재하는 클래스
  • 다른 객체에 의존하지 않고 하나의 모듈로서 동작하는 클래스

JWT

JWT 생성 순서

1. JWT 생성

  • JWT의 subject에 사용자의 식별값(ID)를 넣습니다.
  • 사용자의 권한 정보를 JWT에 넣습니다. Key-Value 형식으로 key를 통해 확인할 수 있습니다.
  • 토큰 만료 시간을 넣습니다. (ms 기준)
  • issuedAt에 발급일을 넣습니다.
  • signWith에 secretKey 값을 담고 있는 key와 암호화 알고리즘을 넣어줍니다.
    • key와 암호화 알고리즘을 사용하여 JWT를 암호화합니다.

2. JWT Cookie에 저장

3. 받아온 Cookie의 Value인 JWT 토큰 substring

  • StringUtils.hasText를 사용하여 공백, null을 확인하고 startsWith을 사용하여 토큰의 시작값이 Bearer이 맞는지 확인합니다.
  • 맞다면 순수 JWT를 반환하기 위해 substring을 사용하여 Bearer을 잘라냅니다.

4. JWT 검증

  • JWT의 구조 중 Payload 부분에는 토큰에 담긴 정보가 들어있습니다.
  • 여기에 담긴 정보의 한 '조각'을 클레임(claim)이라고 부르고, 이는 key-value의 한 쌍으로 이뤄져있습니다.
  • Jwts.parserBuilder()와 secretKey를 사용하여 JWT의 Claims를 가져와 담겨 있는 사용자의 정보를 사용합니다.

UserDetails, UserDetailsService

  • userDetails
  • Spring Security에서 사용자의 정보를 담는 인터페이스이다.
  • method
  • userDetailsService
  • Spring Security에서 유저의 정보를 가져오는 인터페이스이다.
  • method

UsernamePasswordAuthenticationFilter

  1. 사용자가 로그인을 시도하면, UsernamePasswordAuthenticationFilter가 사용자명과 비밀번호를 추출하여 UsernamePasswordAuthenticationToken을 생성합니다.
  2. UsernamePasswordAuthenticationFilter는 생성된 토큰을 AuthenticationManager 에게 전달합니다.
  3. AuthenticationManager 는 등록된 AuthenticationProvider들을 순회하면서 적절한 프로바이더를 찾고, 해당 프로바이더를 통해 실제 인증을 수행합니다.
  4. DaoAuthenticationProviderUserDetailsService를 사용하여 주어진 사용자명을 기반으로 사용자 정보를 조회하고, 인증이 성공하면 새로운 Authentication 객체를 생성하여 반환합니다.
  5. 반환된 Authentication 객체는 인증이 완료된 상태로 다시 UsernamePasswordAuthenticationFilter에게 전달되어 인증된 사용자에 대한 추가 처리를 수행하고, 성공 또는 실패에 따른 적절한 동작을 수행합니다.
profile
개발을 하더라도 탄탄하게

0개의 댓글