[Spring] 인증과 인가

kang·2024년 8월 20일

SPRING

목록 보기
11/22

인증과 인가


  • 인증(Authentication)
    • 인증은 해당 유저가 실제 유저인지 인증하는 개념입니다.

    • 여러분의 스마트폰에 지문인식, 이용하는 사이트에 로그인 등과 같이, 실제 그 유저가 맞는지를 확인하는 절차 입니다.

      접속한 사람이 실제 사람이 맞는 지 확인(홍길동 = 홍길동)

  • 인가(Authorization)
    • 인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념입니다. 예를들어 관리자 페이지-관리자 권한 같은 것들을 들 수 있습니다.

      보안등급 3등급짜리 게시글에 접속이 가능한 지 아닌 지

웹 애플리케이션 인증

일반적으로 이 구조는 멀리 떨어져 있음
그리고 http프로토콜을 이용하여 통신함

통신: 비연결성무상태

비연결성: 서버와 클라이언트가 연결되어 있지 않음 (why? 리소스 절약을 위해서)

무상태: 서버가 클라이언트 상태를 저장하지 않는다.


인증의 방식(2가지)

  • 쿠키 세션 방식의 인증

  1. 사용자가 로그인 요청을 보냅니다.
  2. 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조해봐야겠죠?
  3. 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 “세션 저장소”에 해당 유저가 로그인 되었다는 정보를 넣습니다.
  4. 세션 저장소에서는 유저의 정보와는 관련 없는 난수인 session-id를 발급합니다.
  5. 서버는 로그인 요청의 응답으로 session-id를 내어줍니다.
  6. 클라이언트는 그 session-id를 쿠키라는 저장소에 보관하고 앞으로의 요청마다 세션아이디를 같이 보냅니다. (주로 HTTP header에 담아서 보냅니다!)
  7. 클라이언트의 요청에서 쿠키를 발견했다면 서버는 세션 저장소에서 쿠키를 검증합니다.
  8. 만약 유저정보를 받아왔다면 이 사용자는 로그인이 되어있는 사용자겠죠?
  9. 이후에는 로그인 된 유저에 따른 응답을 내어줍니다.
  • JWT(자바웹토큰) 기방 인증
  1. 사용자가 로그인 요청을 보냅니다.
  2. 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조해봐야겠죠?
  3. 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 유저의 정보를 JWT로 암호화 해서 내보냅니다.
  4. 서버는 로그인 요청의 응답으로 jwt 토큰을 내어줍니다.
  5. 클라이언트는 그 토큰을 저장소에 보관하고 앞으로의 요청마다 토큰을 같이 보냅니다.
  6. 클라이언트의 요청에서 토큰을 발견했다면 서버는 토큰을 검증합니다.
  7. 이후에는 로그인 된 유저에 따른 응답을 내어줍니다.
profile
뉴비 개발 공부중

0개의 댓글