인증과 인가란 무엇일까?

금은체리·2023년 11월 15일
2

Spring

목록 보기
10/49

인증과 인가

  • 인증(Authentication)
    • 인증은 해당 유저가 실제 유저인지 인증하는 개념
    • 스마트폰의 지문인식, 이용하는 사이트의 로그인 등과 같이 실제 그 유저가 맞는지 확인하는 절차
  • 인가(Authorization)
    • 인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가 확인하는 개념
    • 관리자 페이지-관리자 권한 같은 것들

"웹 애플리케이션 인증"은 어떠한 특수성이 있을까?

  • 일반적으로 서버-클라이언트 구조로 되어있고, 실제로 이 두가지 요소는 아주 멀리 떨어져있음

  • Http라는 프로토콜을 이용하여 통신하는데, 그 통신은 비연결성(Connectionless) 무상태(Stateless) 로 이루어짐

  • 비연결성(Connectionless)

    • 서버와 클라이언트가 연결되어 있지 않다는 것
      • 리소스를 절약하기 위함
        • 서버는 실제로 하나의 요청에 하나의 응답을 내버리고 연결을 끊어버리고 있다라고 생각하면 👍🏻
  • 이전의 정보들이 잘 있는것처럼 연속성있게 사용하기 위해

    • 예를 들어, /News/Sports/9 와 같이 특정 스포츠 기사를 본다고 가정
    • 다음 요청에 대한 api url을 이전 계층에 둔다면 연속적으로 사용하고 있다고 느껴짐

인증의 방식

1. 쿠키-세션 방식의 인증

  • 서버가 '특정 유저가 로그인 되었다'는 상태를 저장하는 방식
  • 인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 됨
  • 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념
  1. 사용자가 로그인 요청을 보냄
  2. 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조
  3. 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 "세션 저장소"에 해당 유저가 로그인 되었다는 정보를 넣음
  4. 세션 저장소에서는 유저의 정보와는 관련 없는 난수인 session-id를 발급
  5. 서버는 로그인 요청의 응답으로 session-id를 내어줌
  6. 클라이언트는 그 session-id를 쿠키라는 저장소에 보관하고 앞으로의 요청마다 세션아이디를 같이 보냄
  7. 클라이언트의 요청에서 쿠키를 발견했다면 서버는 세션 저장소에서 쿠키를 검증
  8. 만약 유저정보를 받아왔다면 이 사용자는 로그인이 되어있는 사용자!
  9. 이후에는 로그인 된 유저에 따른 응답을 내어줌

2. JWT 기반 인증

  • JWT(JSON Web Token)
    • 인증에 필요한 정보들을 암호화시킨 토큰
  • JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별함
  1. 사용자가 로그인 요청을 보냄
  2. 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조
  3. 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 유저의 정보를 JWT로 암호화 해서 내보냄
  4. 서버는 로그인 요청의 응답으로 JWT 토큰을 내어줌
  5. 클라이언트는 그 토큰을 저장소에 보관하고 앞으로의 요청마다 토큰을 같이 보냄
  6. 클라이언트의 요청에서 토큰을 발견했다면 서버는 토큰을 검증함
  7. 이후에는 로그인 된 유저에 따른 응답을 내어줌
profile
전 체리 알러지가 있어요!

0개의 댓글