로그인 구현

jaegeunsong97·2023년 1월 26일
0

2023_1_26_TIL

세션기반인증방식

  • HTTP -> stateless함
    • HTTP 요청을 통해 데이터를 주고 받을때 요청이 끝나면 요청한 사용자의 정보 등을 유지 X
      • 이러한 방식으로는 로그인 구현 X -> 매번 이렇게 하면 로그인 너무 귀찮아서
  • 단어
    • 세션 -> 서버와 클라이언트의 연결이 활성화된 상태
    • 세션ID -> 웹 서버 또는 DB에 저장되는 클라이언트에 대한 유니크한 ID
  • 세션기반 로그인 프로세스
    • 처음 로그인 -> 세션ID 생성 -> 서버에서 세션ID를 쿠키로 설정 후 클라이언트에게 전달 -> 클라이언트가 서버에 요청을 보낼 때 해당 세션ID를 쿠키로 담아 전에 로그인 했던 ID인지 확인 -> 로그인 유지
  • 단점
    • 사용자의 상태에 관한 데이터를 서버에 저장했을 때 로그인 중인 유저의 수가 증가하면 서버의 메모리 과부화가 일어날 수 있음
    • DB 중 RDBMS에 저장한다면 직렬화 및 역직렬화에 관한 오버헤드가 발생함(Cost 증가)

토큰기방인증방식(access토큰, refresh토큰)

  • 토큰기방인증방식
    • 토큰기반 인증서버를 통해 다른 컨텐츠를 주는 서버는 stateless하게 두자는 것
    • 주로 JWT토큰 사용됨
    • 인증 로직
      • 인증로직 -> JWT 토큰생성(access토큰, refresh토큰)
      • 사용자가 이후에 access토큰을 HTTP Header - Authorization 또는 HTTP Header - Cookie에 담아 인증이 필요한 서버에 요청해 원하는 컨텐츠 가져옴
  • JWT
    • JSON Web Token -> JSON 객체로 인코딩되고 메시지 인증, 암호화에 사용
      • Header -> 어떤 방법의 서명 알고리즘을 사용할 것인가에 대한 정보
      • Payload -> 데이터, 토큰 발급자, 토큰 유효기간
      • Signature -> 헤더에 정의된 알고리즘, 인코딩된 header + 인코딩된 payload + 비밀키(secret key)를 기반을 생성된 서명값
  • 장점
    • 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요 없음
    • 다른 유형의 토큰과 비교시 매우 가벼움
    • 디코딩시, JSON이 나오기 때문에 JSON을 기반으로 쉽게 직렬화, 역직렬화 가능
  • 단점
    • 토큰이 커지면 서버과부화
    • 토큰 탈취당하면 디코딩시 데이터 다 볼 수 있음
  • 토큰
    • access토큰
      • 수명 짧게
    • refresh토큰
      • 수명 길게
      • access토큰이 만료시, 다시 access토큰을 얻기 위해 사용되는 토큰
      • access토큰이 만료될 때마다 인증에 관한 비용 줄임
      • 새로고침 할 때마다 refresh토큰을 기반으로 새로운 access 토큰 얻음
    • 과정
        1. access 토큰 받기
        1. header - authorization에 access 토큰 넣기
        1. cookie에 refresh 토큰 넣기(서버 보내기) -> access 토큰 받기
  • 주의할점
    • 위의 과정을 할때 주의점이 있음
      • Bearer< Token>으로 bearer을 앞에 둬서 토큰 기반인증방식이라는 것을 명시
      • https 사용
      • 쿠키에 저장하면 sameSite: 'Strict' 사용해야 함
      • 수명이 짧은 access 토큰을 발급해야 함
      • url에 토큰을 전달하지 말 것

참조

https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-http-http%EB%9E%80-%ED%8A%B9%EC%A7%95-%EB%AC%B4%EC%83%81%ED%83%9C-%EB%B9%84%EC%97%B0%EA%B2%B0%EC%84%B1/
https://velog.io/@zwon111/%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%A1%9C%EA%B7%B8%EC%9D%B8%EC%9D%84-%EC%B2%98%EB%A6%AC%ED%95%A0%EA%B9%8C-1.JWT-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://www.okta.com/kr/identity-101/what-is-token-based-authentication/

profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글