Jaeilit

TIL4(JWT, API) 본문

TIL

TIL4(JWT, API)

Jaeilit 2021. 9. 19. 18:56
728x90

1. JWT

JWT(JSON WEB TOKEN) 란?

  • JSON 웹 토큰(JWT) 정보를 JSON 객체로 안전하게 전송하기 위한 간결하고 자체 포함된 방법을 정의 하는 개방형 표준( RFC 7519 )입니다.
  • JWT는 크기가 비교적 작기 때문에 URL과 POST 매개변수를 통해 HTTP 헤더 내부에서 보낼 수 있으며 비교적 빠르게 전송됩니다.
  • 모든 Auth0 발급 JWT에는 JSON 웹 서명(JWS)이 있습니다 . 즉, 암호화되지 않고 서명됩니다. 

인용글 https://auth0.com/docs/security/tokens/json-web-tokens

 

항해99 미니프로젝트 사용예제

  • POST 요청으로 url 담아서 쿠키(token)를 전송
  • 서버측에서 token_receive로 받아옴
  • 받아온 token_recevie를 playload 해싱HS256 디코드
  • token_receive 의 값은 Header.PayLoad.서명이 .을 기준으로 나와있다.
  • decode 한 payload 의 값은 id와 사용자 만료일을 나타내는 exp 로 이루어져있다.
  • 로그인을 해보면 cookie 에 my_info 라는 jwt 토큰이 담겨져있는 것을 확인 할 수 있음

 

POST 로 url에 담아서 전송
token 을 받아와서 payload 디코드
2번째 사진에서의 print 의 값 -> 첫번째 출력 값 : token_recevie 두번째 출력 값 : payload
쿠키안의 my_info의 값이 윗 사진의 token_recevie 의 출력과 일치한다.

 

JWT 구조

파란색영역의 양 옆의 . 을 기준으로 header.payload.서명 으로 이루어져있음,

1. Header

암호화 작업을 설명하는 매개변수와 사용된 매개변수를 포함하는 JSON 객체입니다. JOSE(JSON 객체 서명 및 암호화) 헤더는 일반적으로 이름/값 쌍으로 구성된 헤더 매개변수 세트로 구성됩니다. 즉, 사용 중인 해싱 알고리즘(예: HMAC SHA256 또는 RSA) 및 JWT 유형입니다.

 

2. PayLoad

페이로드에는 엔터티(일반적으로 사용자)에 대한 설명과 클레임이라고 하는 추가 엔터티 속성이 포함됩니다. 이 예에서 엔티티는 사용자입니다.

 

3. JWS 서명(시그니처)

서명은 JWT를 보낸 사람이 누구인지 확인하고 메시지가 도중에 변경되지 않았는지 확인하는 데 사용됩니다.

예를 들어 HMAC SHA256 알고리즘을 사용하여 토큰에 대한 서명을 생성하는 경우 다음을 수행합니다.

 

JWT 특징

  • 사용자 인증에 필요한 정보는 토큰 자체에 포함 별도의 인증 저장소가 필요가 없다
  • Self-contained 토큰 자체에 정보를 담고 있으므로 양날의 검이 될 수 있다.
  • 토큰의 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부하를 줄 수 있다.
  • Payload 인코딩 : 암호화 된 것이 아니라 BASE64로 인코딩 된 것이다. 중간에 Payload를 탈취하여 디코딩하면 데이터를 볼 수 있으므로, JWE로 암호화 하거나 Payload 에 중요 데이터를 넣지 않아야한다.
  • JWT는 상태를 저장하지 않기 때문에 한번 만들어지면 제어가 불가능하다. 즉, 토큰을 임의로 삭제가 불가능 하다는 의미이므로 토큰 만료 시간을 꼭 넣어주어야한다.
  • 토큰을 클라이언트 측에서 관리해야 하기 때문에, 토큰을 저장해야한다.

2. API

API란?

 API는 Application Programming Interface의 약자로 응용 프로그램에서 사용할수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만드는 인터페이스를 뜻한다.

 

주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등 자신이 원하는 기능을 제어할 수 있도록 하는 인터페이스를 제공한다. 따라서 원하는 기능을 제어하는 API를 직접 만들 수도 있다.

 

RESTfull API

1. REST

  • Representational State Transfer의 약자
  • 자원을 URL로 표시하고 해당 자원의 상태를 주고 받는 것을 의미

구성요소

  • 자원(resource) : URI
  • 행위(Verb) : HTTP METHOD
  • 표현(representations)

REST는 URL을 통해 자원을 표시하고 HTTP METHOD를 이용하여 해당 자원의 행위를 정해주며 결과를 받는 것을 말함

 

2. RESTful이란?

  REST를 REST답게 쓰기 위한 방법으로 공식적이지 않은 개발자들이 비공식적으로 제시한 것이다. 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이 목적이다.

 

  • CRUD의 기능을 전부 활용해야한다. (예. POST로만 모든 것을 처리하면 RESTFUL이 아니다.)
  • URI에 자원과 id외 정보만 들어가야한다.

 

REST의 CRUD Method

  • POST - Create 생성
  • GET - Read 읽기
  • PUT - Update 갱신
  • Delete - Delete 삭제

3. URL vs URI

  • URL
    • 프로토콜 : http, https, ftp 등등
    • 호스트네임 : 도메인 or IP ( 서버컴퓨터의 이름 - 위치)
    • URL path : 서버컴퓨터(host)에서 클라이언트가 요청한 파일 디렉토리
    • 쿼리 : 추가 질문사항
  • URI
    • identifier : 식별자, 자원 식별자, id(index)
    • URI가 URL 을 포함
    • 예시: http//localhost/article/7
      • article (예를 들어 db 테이브블 이름) 이라는 db에 저장 된 데이터 7번째것을 나타냄

즉, URL은 서버컴퓨터에서 클라이언트가 요청한 파일의 디렉토리를 나타내지만 URI은 자원의 고유 식별자(id값)이다.

 

 

728x90

'TIL' 카테고리의 다른 글

TIL(7)REDUX_1편  (0) 2021.09.24
TIL(6) 배열메서드 Array.map(forEach), filter, concat, from  (0) 2021.09.21
TIL3(저장소Storage)  (0) 2021.09.18
TIL2(미니프로젝트 완성)  (0) 2021.09.17
TIL1(Git push)  (0) 2021.09.16