인증 방식, OAuth, JWT

Hyunz·2022년 1월 31일
1

cs/web

목록 보기
5/6
post-thumbnail

인증방식

보편적으로 API Key가 사용된다.


OAuth (Open Authentication)

소셜로그인에서 사용하는 인증방식 : 인터넷 사용자들이 회원가입을 하지 않고 다른 웹사이트 상의 자신들의 정보를 통해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 개발형 표준 방법


네이버의 내 정보를 통해 어떤 쇼핑몰에 접근한다고 가정해보자. (OAuth 2.0 기준)

  • 사용자 : 계정을 가지고 있는 개인 (나)
  • 소비자 : OAuth를 사용해 서비스 제공자에게 접근하는 웹사이트 또는 앱 (어떤 쇼핑몰)
  • 서비스 제공자 : OAuth를 통해 접근을 지원하는 웹 애플리케이션 (네이버)
  • 소비자 비밀번호 : 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키 (어떤 쇼핑몰에 네이버로 접근하려면 그 쇼핑몰에서 이미 네이버에 인증 설정 같은걸 해놨을 것임. 그 인증을 확인하기 위한 것)
  • 요청 토큰 : 소비자가 사용자에게 접근권한을 인증받기 위해 필요한 정보가 담김
  • 접근 토큰 : 인증 후에 사용자가 서비스 제공자가 아닌 소비자를 통해 보호 자원에 접근하기 위한 키 값

토큰 종류

  • Access Token
    • 만료기간 있음 → 끝나면 다시 요청해야 함
    • 만료기간 짧음
    • Refresh Token에 의해 만들어짐
  • Refresh Token
    • 만료기간이 비교적 길다
    • 만료되면 아예 처음부터 진행해야 함

OAuth에 의해 발급되는 토큰은 특별한 정보를 가지고 있지 않는 일반적인 스트링 형태임. 그래서 해당 토큰으로 인증할 때는 그 토큰을 통해서 사용자에 연관된 권한을 식별한 뒤 권한 허용 해줘야함. 토큰에 사용자 정보가 담겨있는 JWT와 달리 토큰을 확인하는 과정이 한 번 더 추가되는 것임

JWT (JSON Web Token)

Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다. Claim은 사용자에 대한 속성을 의미한다. 즉, 토큰 자체가 사용자를 나타낼 수 있는 정보를 가지고 있고, 그 토큰을 Json을 이용하여 정의한다.

Claim (메시지) 정의

JWT는 Claim을 JSON 형태로 표현하는 것인데, JSON은 개행문자가 있기 때문에 REST API 호출시 HTTP Header 등에 넣기가 매우 불편하다. 그래서 Claim JSON 문자열을 BASE64 인코딩을 통해 하나의 문자열로 변환한다.

JWT 구조

Header, Payload, Signature의 3 부분으로 이루어지며, Json 형태인 각 부분은 Base64로 인코딩 되어 표현된다. 또한 각각의 부분을 이어 주기 위해 .구분자를 사용하여 구분한다. 추가로 Base64는 암호화된 문자열이 아니고, 같은 문자열에 대해 항상 같은 인코딩 문자열을 반환한다.

  • Header

    typ과 alg 두가지 정보로 구성된다. Signature를 해싱하기 위한 알고리즘을 지정한다

    • typ : 토큰의 타입을 지정 ex) JWT
    • alg : 알고리즘 방식 지정 ex) HS256(SHA256), RSA
  • PayLoad

    토큰에서 사용할 정보의 조각들인 Claim이 담겨 있다. Json(key-value) 형태로 다수의 정보를 넣을 수 있다.

  • Signature

    토큰을 인코딩하거나 유효성 검증할 때 사용하는 고유한 암호화 코드이다.

    1. 헤더와 페이로드의 값을 각각 BASE64로 인코딩
    2. 인코딩한 값을 비밀키를 이용해 헤더에서 정의한 알고리즘으로 해싱
    3. 이 값을 다시 BASE64로 인코딩하여 생성

JWT 보안

JWT는 기본적으로 Claim에 대한 정보를 암호화하지 않는다. 단순히 BASE64로 인코딩만 하기 때문에 사용자 정보가 누출될 수 있는 가능성이 있다. 이를 보완하기 위해 토큰 자체를 암호화하는 방식이 있다. JSON을 암호화 하기 위한 예시로 JWE(JSON Web Encryption)이 있다.





참고자료1
참고자료2(OAuth)
참고자료3(OAuth)
참고자료4(JWT)
참고자료5(JWT)

profile
Do my BEST

0개의 댓글