JWT & OAuth

Dayeon Kim·2021년 10월 3일
0
  • 웹사이트에서 클라이언트에 저장해 놓는 데이터를 "쿠키(Cookie)"라고 합니다.

  • 쿠키(Cookie)는 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀔 수 있습니다.

  • 페이지 탐색을 하거나 지역 및 언어, 성능에 대한 보고 혹은 마케팅 용 등 다양한 용도로 사용되곤 합니다.

  • 쿠키는 웹사이트 접속시 접속자의 개인장치에 다운로드 되고 브라우저에 저장되는 작은 텍스트 파일입니다.

  • 웹사이트는 쿠키를 통해 접속자의 장치를 인식하고, 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장합니다.

일반적으로 쿠키에는 만료일이 있습니다. 예를 들어,

  • 브라우저를 닫는 경우 자동으로 삭제되는 쿠키(세션 쿠키)
  • 일부는 수동으로 삭제되기 전까지 남아있는 등 더 오랜기간 동안 컴퓨터에 저장되는 쿠키도 있습니다(지속적 쿠키).

쿠키 값은 유저가 자유롭게 편집이 가능하며 통신 상 유출되기 쉽습니다.

1.2 Session

  • 서버에 저장해 놓는 데이터, 세션(Session)

- 세션의 단점

  • 시도 때도 없이 세션이 생성이 됩니다.
  • 서버에 저장되는 세션이 많아지면 많아질수록 세션을 만들고, 찾는 과정에서 처리를 요구하는 부하와 저장 공간이 추가적으로 필요하게 됩니다.

2. JWT 란 무엇인가

  • JSON Web Token (JWT)
  • JSON 객체를 사용하여 가볍고
  • 자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해주는 토큰
  • 토큰이 일정시간 이후에는 만료되도록 합니다.(exp 라는 키로 해당 토큰의 만료시간을 추가해둡니다.)

- 자가 수용적 (self-contained)

  • 헤더 (토큰의 종류와 사용된 알고리즘)
  • 내용 (토큰을 통해 클라이언트에게 저장/전달해주고 싶은 정보)
  • 서명 (인증하기 위한 증명서)

이 때, 헤더와 내용은 JSON 형식이지만 이를 안전하게 전달하기 위해서 각각 base64 형태로 인코딩합니다.

인코딩 한 헤더와 내용을 특정 암호화 알고리즘을 통해서 암호화시켜 서명으로 사용합니다.

그렇게 되면 서명 부분을 복호화 했을 때의 값이 (헤더 + 내용)과 일치한다면 올바른 토큰이라는 것을 증명할 수 있습니다!

이를 자가 수용적 (self-contained) 이라고 표현합니다.

JWT 는 필요한 모든 정보를 자체적으로 지니고 있습니다.

  • 토큰에 대한 기본정보(헤더)
  • 전달하고 싶은 정보(내용)
  • 토큰이 검증됐다는것을 증명서까지 포함하고 있습니다.(서명)

3. OAuth 에 있는 역할

  • OAuth는 다양한 플랫폼 환경에서 권한 부여를 위한 산업 표준 프로토콜

예를 들어 스코르타파딩클럽, 유저, 페이스북

  • 우리는 페이스북 계정 정보라는 자원을 이용할 것입니다. 이를 Resource 라고 합니다.
  • 페이스북은 페이스북 계정이라는 자원을 가지고 있으므로 Resource Server 라고 합니다.
  • 그 자원을 가진 유저는 계정의 주인이므로 Resource Owner 라고 합니다.
  • 계정 정보라는 자원을 가져가서 사용하고 싶은 스코르타파딩클럽은 Client 라고 합니다.

4. OAuth 의 흐름에 대해 설명하기

  1. Resource Owner 가 Client 에게 소셜 로그인을 요청합니다.
  2. Client 의 정보(client_id, redirect_url)을 들고 Resource Server에게 갑니다.
  3. Resource Owner 가 자신의 계정정보를 이용해 Resource Server에 로그인합니다.
  4. Resource Server 에서 authorization_code 를 생성해 redirect_url 로 보냅니다.
  5. Resource Owner 는 redirect_url 에 도착해 Client 에게 authorization_code 를 보냅니다.
  6. Client 는 authorization_code 와 client_secret 을 이용해서 Resource Server 로부터
    access_token 을 받아옵니다.
  7. 이제 Client 는 access_token 을 가지고 Resource 에 자유롭게 접근이 가능합니다!

0개의 댓글