[Basic] 인증, 인가

2022. 12. 14. 16:00Web/네트워크

Spring에서 보안 쪽 개념을 한번 훑으면서 나왔던 키워드들을 정리해보려고 한다. 해당 부분은 웹에서도 관련이 있어서 일단은 웹 쪽으로 기록을 시작하게 되었다.

 

인증, 인가

 

  • 인증 - authentication
    • 식별이 가능한 정보로 서비스에 등록이 된 유저의 신원을 입증하는 과정
    • 로그인

 

  • 인가 - authorization
    • 해당 유저가 특정 리소스 혹은 기능에 접근할 수 있는 권한이 있는지 확인하는 개념
    • 로그인을 해야만 진행할 수 있는 기능, 이때 기능을 사용할 수 있는지에 대한 입증

 

로그인 - 인증 / 댓글달기 - 인가

 

웹 어플리케이션 특수성

 

  • 웹  어플리케이션의 경우 HTTP라는 프로토콜을 사용하여 통신을 진행
  • 비연결성(connectionless)과 무상태(stateless)로 이루어짐

비연결성

  • 연결을 유지하지 않는 모델
  • 초 단위 이하의 빠른 속도 응답
  • 트래픽이 많고 큰 규모의 서비스 운영시 한계를 보임
    • 서버 자원 효율적 사용

 

비연결성


지속 연결

 

  • 연결을 유지하는 모델
  • 처음 연결을 유지하여 요청/응답을 진행하는 연결
  • 응답을 기다리지 않고 연속해서 요청 가능 - 파이프라이닝

지속연결


무상태 - stateless

 

  • 서버가 클라이언트 상태 보존 X
  • 장점 
    • 서버의 확장성 ↑ → 대량의 트래픽 발생에도 대처가 수월
    • 같은 서버를 써야한다는 점이 없기에 서버에 문제가 생겨도 이상이 없음

 

  • 단점 
    • 클라이언트 측에서 추가 데이터 전송

 

  • 상황
    •  로그인이 필요가 없는 단순한 서비스, 검색

상태 유지 - stateful

 

  • 서버가 클라이언트의 상태 보존 O
  • 장점
    • 서버에 이전 내역들이 저장이 되기에 중간에 중단되어도 같은 위치에서 다시 시작 가능

 

  • 단점 
    • 사용자가 서버를 사용하는 동안 계속 같은 서버를 연결시켜야 함. → 리소스 사용 증가
    • 서버가 장애가 나면 연결의 끊김

 

  • 상황
    • 온라인 뱅킹, 로그인, 이메일

 


대부분의 웹사이트 연결 후 상태 유지인 Stateful은 최소한으로 사용한다.  실제로 웹의 경우 비연결성, 무상 태성만 사용하는 것이 아닌 지속 연결과 stateful까지 사용하며, 주어진 상황에 맞게 사용할 수 있도록 설계해야 한다. 

 

인증의 방법

 

인증의 방법은 다음과 같다. 인증의 방법에는 몇 가지가 더 추가로 존재하지만 이는 추후에 학습하면서 작성하려고 한다.

 

  • 세션 - 쿠키
  • 토큰  ←  JWT(Json Web Token)  ← Access Token, Refresh Token

세션 - 쿠키

 

세션 - 쿠키

 

  • HTTP 프로토콜의 약점을 보완하기위해 등장
  • HTTP 프로토콜은 비연결 성과 무상 태성을 바탕으로 진행
  • 만약 stateless인 상태에서 로그인이 필요한 작업, 즉 stateful 한 경우를 대처하기 위해 등장

 

세션 쿠키
특정 유저 로그인 기록을 서버에서 저장하는 방식  인증과 관련이 된 사용자 정보를 로컬(pc)에서 저장
인증과 관련이 된 최소한의 정보를 서버에 저장 로컬에 저장이 되는 키와 값이 들어있는 데이터 파일
여러명의 클라이언트를 구분하기 위해 SessionId 발급 주어진 SessionId를 바탕으로 서버와 연결

 

로컬에 넘어온 쿠키


토큰 - JWT

토큰 - JWT

 

  • 인증에 필요한 정보, 즉 사용자에 대한 속성을 암호화 하여 진행이 된다.
  • 토큰은 여러가지 종류가 존재하며 JWT의 경우도 토큰의 한 종류이다
    • Json Web Token
    • 사용자 정보 : 이름, 만료시기, 권한.. etc
    • 비밀번호 같은 중요 정보는 이미 로그인을 하면서 토큰을 발급받은 것이기에 제외
  • 세션 - 쿠키 같은 경우 같은 session id를 저장하여 stateful을 유지
    • 이때 세션의 경우 session-id값을 저장하는 세션 저장소가 따로 존재하게 된다.
    • 서버는 세션 저장소를 확인하여 값을 확인 후 이제 요청된 내용을 반환한다.

session - cookie

  • 토큰의 경우 이러한 세션 저장소를 거치는 과정을 제거를 했다.
  • 토큰을 decoding 하는 역할을 지닌 것을 Secret Key라고 한다
  • JWT는 읽기만 가능(read only)한 데이터이다.
  • 해당 secret key를 각 서버에 배치를 하여 각 요청에 맞게 토큰을 암호화 및 복호화를 진행한다.

JWT

  • JWT도 물론 쿠키와 동일하게 유효기간이 존재
  • Access / Refresh 토큰이 존재 / RefreshToken은 선택사항
  • 처음 토큰이 생성이 되면 Access / Refresh Token은 사용자에게 전달
  • 서버는 Refresh Token만 지니고 있음 
    • Access Token 
      • 유효기간이 존재한다. 해당 시간이 지나면 해당 토큰은 기간이 지나 사용 x
    • 토큰의 기간이 지날 때마다 토큰 재발급은 개발 당시 선택사항
    • Refresh Token 등장
      • Access Token의 기능이 완료가 되면 추후에 요청을 보낼 때 Refresh Token과 다시 서버로 보냄
      • Refresh Token을 확인하여 다시 클라이언트에 Access Token 반환

 

  • 장점
    • 동시 접속자가 많을 경우 서버 부하 ↓
    • 세션 서버를 따로 사용하지 않기에 리소스 처리 효율 증가

 

  • 단점
    • 토큰도 결국 관리해야 하는 대상 
    • 구현의 복잡도 증가
    • secret key 유출 시 JWT 조작 가능
    • JWT에 담는 내용이 커질수록 네트워크 비용이 증가

 

출처

 

인프런

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

인증과 인가 개념 이해 (notion.site)

 

인증과 인가 개념 이해

[목차]

teamsparta.notion.site

상태 저장 vs 상태 비저장 (redhat.com)

 

Stateful vs stateless

Whether something is stateful or stateless depends on how long the state of interaction with it is being recorded and how that information needs to be stored.

www.redhat.com

 

[10분 테코 톡] 🎡토니의 인증과 인가 - YouTube

 

'Web > 네트워크' 카테고리의 다른 글

[Etc] Presigned URL이란  (0) 2023.08.28
[Web 지식] IPv6 - Internet Protocol  (0) 2023.05.25
[REST API] REST API 설계  (0) 2022.12.22
[HTTP] PUT / PATCH 차이  (0) 2022.12.22
[HTTP] HTTP 상태코드  (0) 2022.11.05