TIL(Today I Learned)

12월 21일(목)

공부한 내용을 제 언어로 빠르게 정리한 내용이라서 잘못된 내용이 있을 수 있습니다.

서버 스터디

Authentication vs Authorization

  • Authentication은 인증, Authorization은 허가(권한 부여)
  • Authentication은 사용자를 식별하는 것.
    • 사용자가 입력한 아이디와 비밀번호가 실제 값과 일치하는지 확인하여 회원인지 확인하는 것
  • Authorization은 사용자가 리소스나 서비스에 접근할 수 있는 권한을 주는 것.
    • 관리자는 서비스의 모든 정보를 볼 수 있는데 반해서 회원은 자신의 정보만 볼 수 있게 권한이 제한됨.
  • Session은 Authentication은 유지하는 방법 중 하나

Authentication을 유지하는 방법

  1. Session-based Authenticaiton
    • 사용자가 로그인하면 서버는 사용자에게 고유한 세션 ID를 부여
    • 세션 ID는 브라우저 쿠키에 저장, 사용자가 요청을 보낼때마다 서버에 전송
    • 서버는 세션 ID를 사용하여 사용자의 인증 상태를 유지
  2. Token-based Authenticaiton
    • 사용자가 로그인하면 서버는 토근을 발급
    • 클라이언트는 이 토큰을 저장하고, 필요할 때마다 요청 헤더에 토근을 포함시켜 서버에 전송하여 신원을 확인.
    • 서버는 받은 토큰을 검증하여 유효한지 확인하고, 유효하면 해당 요청을 처리.
    • 서버는 세션 상태를 유지하지 않아서 확장성에서 유리.
    • 토큰이 탈취되면 무단으로 서비스를 접근할 수 있어서, 토큰 탈취에 유의해야 한다는 단점이 있음.
  3. OAuth 등 외부 인증 서비스 사용
    • 구글이나 페이스북 등의 외부 서비스를 통해 사용자 정보를 제공 받아 인증 상태를 유지하는 방법

JSON Web Token

  • 토큰 기반 인증 방법중 하나로, JSON 포맷을 기반으로 이루어진 웹 토큰
  • 토큰 자체에 사용자 정보를 포함할 수 있어서 추가적인 데이터베이스 조회 없이 사용자 정보를 확인 할 수 있음
  • JWT는 Header, Payload, Signiture 이렇게 세 부분으로 구성.
    • 예) ‘xxxxx.yyyyy.zzzzz’
  • Header에는 JWT 유형과 암호화 알고리즘 정보를 포함.
  • Payload에는 Claim이라는 정보들을 담고 있음.
    • Claim은 세 가지로 나뉘며 Registered claims, Public claims, Private claims가 있다.
    • Signiture은 Header와 Payload를 결합하고 특정 암호화 알고리즘을 사용하여 서버에서 생성한 비밀 키로 서명
      • 이 서명을 통해 토큰의 무결성을 확인. 즉, 토큰이 변경되었는지 여부를 검증