CS - Web( 인증 / 인가 )

hojoon·2023년 5월 29일
0
  • OAuth란, Google 로그인 기능을 떠올리면 된다.

  • 웹 서버에 비밀번호를 제공하지 않고도, 구글 계정의 읿 접근 권한을 부여할 수 있다.

  • 실제로 많은 앱에서는 SNS 간편 로그인 기능을 제공한다.

  • 안전하지 않은 SNS 로그인 방식을 생각해 보자.
    (사용자가 서버에게 구글 아이디와 패스워드를 알려주어야 한다 )

계정정보가 직접적으로 노출된다. -> 사용자가 서비스를 이용하지 않으려고 함

Access Token 이용하기

  • 사용자가 설정한 권한에 대해서만 Google 정보에 접근할 수 있도록 하자.
  • 바로 Access Token을 이용하는 것이다.
  1. 사용자에 대한 Access Token 주기
  2. 사용자 정보 얻기

OAuth 구성 요소

OAuth 동작 예시

JWT (토큰 인증 방식)

  • JSON은 데이터를 주고받기 위해 사용하는 경량의 데이터 형식중 하나다.
  • JSON 형식에서는 키와 값의 쌍으로 이루어진 데이터 객체를 사용한다.

세션 인증 방식

Token 인증 방식

  • JWT는 인증에 필요한 정보를 암호화한 JSON 형식의 토큰이다.

  • HTTP 헤더에 실어 서버가 클라이언트를 식별할 수 있도록 한다.

  • JWT는 세 가지 구성요소를 가진다.

  • 사용자가 인증을 수행하면, 서버는 다음의 정보를 가진 JWT 토큰을 발급한다.

  • Header : 사용할 해시 알고리즘 등의 메타 정보를 포함

  • Payload : 키와 값 형식으로 이루어진 정보의 구성

  • Signature : 정보를 해싱하여 Client에게 함께 전달한다.

xxxxx[header].yyyy[payload].zzzz[signature]

JWT를 이용한 인증

  • 나중에 사용자는 자신이 받았던 JWT 토큰을 다시 서버에 전달한다.
  • 서버는 정보를 해싱한 값이 사용자로부터 받았던 값과 일치하는지 체크한다.
  • 이 과정에서 비밀키를 이용한다.

JWT 인증 원리

  • 사용자는 서버가 처음에 부여했던 권한만큼의 작업을 요청할 수 있다.
  • 데이터를 변경하면 해시 값이 변경되므로, 악의적인 공격자가 payload를 수정하는 것이 불가능
  • 서버의 비밀키를 모르기 때문에 !! 서명값이 일치하지 않아 위조 여부를 알 수 있다.

JWT 방식의 특징

중요한 것은 토큰에는 중요한 정보를 담지 않는 것이 원칙 !!

  • JWT의 목적은 정보보호가 아니다.
    -> 위조 방지 (인증된 사용자인지를 체크하는 것이지 사용자의 정보를 보호하는게 아니다.)
    -> 서버의 메모리 가용 이점(DB조회 필요 없음)

profile
프론트? 백? 초보 개발자의 기록 공간

0개의 댓글