티스토리 뷰

Web Programing

HTTP 사용자 인증 방식

akon47 2022. 4. 24. 00:30
반응형

비연결성/무상태의 특성을 지니는 HTTP

  • 비연결성 (Connectionless)
    • 클라와 서버가 한 번 연결을 맺은 후 서버가 응답하면 연결을 끊어 버림.
    • 하지만 통신에는 연결지향 프로토콜인 TCP를 사용함.
  • 무상태 (Stateless)
    • 위의 비연결성의 특성으로 연결이 해제됨과 동시에 서버와 클라이언트는 클라이언트가 이전에 요청한 결과에 대해서 잊어버리게 된다. 이러한 특성을 무상태라고 함.

SSH, FTP와 같은 연결지향형 통신의 흉내

비연결성/무상태의 특성을 지니는 HTTP 에서 SSH, FTP와 같은 연결지향형 통신의 흉내를 위하여 HTTP는 여러가지 기술을 도입함.

쿠키, 세션 등을 이용하여 서버가 상태를 가지도록 함.

HTTP 표준 인증 플로우

WWW-Authenticate 헤더

HTTP Authorization 헤더

표준 인증 스킴

  • Basic
    • <사용자 계정:암호>의 평문을 Base64 인코딩하여 전송
  • Bearer
    • OAuth 2.0 (권한 위임을 위한 공개 표준)
  • Digest
    • Basic 스킴의 보안을 강화한 버전.
  • HOBA
  • Mutual
    • 인증서를 이용한 인증 방식
  • AWS4-HMAC-SHA256
    • 아마존에서 제공하는 인증 방식. (토큰)

Basic 인증 스킴

계정과 비밀번호를 헤더에 “계정:비밀번호” 형태로 Base64 인코딩하여 전송한다.

평문 그대로 Base64 인코딩만 한 것으로 보안에 매우 취약하여 HTTPS가 필수다.

Digest 인증 스킴

Basic 인증 스킴과 유사하다.

평문으로 전송하던 Basic 인증과 달리 비밀번호를 절대로 네트워크를 통해 평문으로 전송하지 않는다 라는 부분이 핵심이다.

Bearer 인증 스킴

OAuth2.0 프로토콜을 사용하는 인증 스킴. (표준)

사용자 인증이 아닌 인가를 위한 인증 스킴이다. (제3자에게 권한 위임)

표준 Basic 과 Digest 인증의 문제

HTTPS를 사용하는것이 권장된다.

Basic과 Digest 인증은 매번 사용자 계정과 비밀번호 정보가 헤더에 포함되므로 보안상 문제가 있다.

브라우저 의존적이다.

세션 기반의 인증 시스템

토큰 기반의 인증 시스템

JSON Web Token (JWT)

  • 웹표준의 토큰 생성 방식 (통신 방식의 대한 표준이 아닌 토큰 생성 방식에 대한 표준)
  • 필요한 정보를 자기 토큰값에 가지고 있음
    • “자가 수용적” 이라고 표현함. (클레임 방식)
  • 위변조방지 기능
    • 서버가 발행한 토큰이 위변조 되었는지 검증 가능함.
  • 필요한 정보를 자기가 가지고 있기 때문에 MSA 에 적합

JWT 토큰 구성

간단하게 보는 JWT의 위변조방지 원리.

JWT 토큰 기반의 인증 시스템 구현

1.비교적 만료시간이 짧은 Access_Token은 LocalStorage에 저장하고 A
2.비교적 만료시간이 길고 중요한 Refresh_Token은 HttpOnly Cookie에 저장.
3.서버단에서 HTTP 요청 레퍼러 체크등으로 CSRF를 방지.
4.서버단에서 Access_Token 발급 시 IP등이나 클라이언트 정보를 저장해놓고 해당 정보가 달라지면 만료시간과 무관하고 다시 인증 요청.

OAuth 2.0?

  • 다양한 플랫폼 환경에서 권한 부여를 위한 산업 표준 프로토콜
    • 쉽게 말해 사용자가 페이스북이나 트위터 같은 서비스의 기능을 다른 제3의 앱에서도 사용할 수 있게 한 것. (API 서비스)
    • 로그인과는 다른 개념으로 분리해서 이해를 해야한다. (인증, 인가)
  • 토큰 을 기반으로 한 권한 부여 프로토콜.
  • Authentication(인증)이 아닌 Authorization(인가) 임을 숙지.
    • 인증 : 본인 여부와 정규 이용자 여부를 확인하는 것 .
    • 인가 : 접근할 수 있는 권한이 주어지는 것.

OAuth2.0 프로토콜 흐름

OAuth2.0 프로토콜 흐름 예제

Authorization Grant (권한 위임 동의서) 종류

Authorization Code Grant Type (승인 코드)

Implicit Grant Type (암묵적)

Resource Owner Password Credentials Grant Type (사용자 비밀번호 인증)

Client Credentials Grant Type (앱 인증)

위 4가지 타입은 “허가를 받는 유형” 이라고 보면 된다.

Authorization Code Grant Type (승인 코드 방식)

클라이언트가 백엔드를 제공하는 웹앱이라면 보통 이 방식을 채택.

가장 복잡하지만 가장 많이 쓰이는 방식

반응형

'Web Programing' 카테고리의 다른 글

Vue.js 시작하기  (0) 2022.04.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함