본문 바로가기
프로그래밍 관련/프로그래밍 관련 잡지식

REST API. 그리고 JWT 토큰 & 인증에 대하여

by 존버매니아.임베디드 개발자 2021. 4. 15.
반응형

REST API를 이용하여, 클라이언트가 서버에게 데이터전송을 요청한다는 것을 알게되었다.

 

그런데 만약 회원의 전화번호, 집주소 이런 정보를 REST API 를 사용하여 요청하면 어떻게 될까?

 

공개된 REST API를 사용해서 누구나 다른 사람의 개인정보를 Return 받을 수 있다면, 이는 문제가 된다.

 

따라서, 인증을 거쳐서 인증이 통과된 사람만 특정 데이터를 받을 수 있도록 하는 보안절차가 필요하다.

 

=====토큰?

이러한 보안절차 중에 사용되는 방법 중 하나가 바로 JWT 토큰을 이용한 인증이다.

 

토큰이라는 것은 '어떤 데이터' 인데, 인증의 증거물로 사용되는 데이터 라고 할 수 있다.

(비밀번호 같은 느낌이라고 해야되나?)

 

예시를 들어보자.

회원의 전화번호를 서버에게 요청하는 Case를 생각해보자.

이 사이트에는 회원마다 고유의 ID를 갖고 있다.

따라서

REST API의 파라미터로, 회원의 ID, PhoneNumber 이런 형태의 파라미터를 사용해서

REST API 를 만들 것이고

   ex) http://test_server.com/PhoneNumber?CustomerId="이명박" 

(위 REST API는 문법적으로 정확하지 않다. 대강의 예시만 든 것임)

 

이제 저 REST API를 서버에게 요청하면, Id가 이명박인 회원의 전화번호를 Return 해줄 것이다.

 

근데 이러면 문제가된다. 회원의 ID만 알면, 누구라도 그 회원의 전화번호를 알 수있게 되기 때문에 개인정보가 유출된다.  우리는 오직 본인인증을 거친 사용자만이, 본인의 전화번호를 전달받을 수 있도록 하고 싶다.

 

이 때 사용되는것이 토큰을 이용한 인증이다.

 

 

### 토큰의 사용방법 ?

인증의 필요성은 알겠고, 그래서 토큰이 뭐냐면

위 예시의 경우, 내가 '이명박' 입니다. 라고 증명할 수 있는 데이터.  이것이 토큰이다.

 

그래서 이 토큰을 어떻게 만드냐면,

토큰을 만들때는 이런저런 정보가 필요한데 그 중에 가장 중요한게 Key 값이다.

이 key 값이라는건 각각의 유저마다 서로 다른. 고유한 값을 가지고 있고.. 이것이 서버에 저장되어있다.

그리고 이 key값을 사용해서, 토큰을 만드는 방법은 서버에서 정의를 해두고 사용자에게 알려준다.

(API 가이드문서 등에서 보면 됨)

 

업비트의 경우,

업비트 사이트에 로그인 한 후, 특정 메뉴에 들어가면 나의 Key가 무엇인지를 받을 수 있다.

이 Key 값을 사용하면 고유의 Token 이라는 데이터를 만들어낼 수 있다.

 

그러면 이제,

다시 REST API를 사용해보자.

 ex) http://test_server.com/PhoneNumber?CustomerId="이명박"  

이런 형태의 REST API를 쓸 때, 위 url 에다가 앞에서 만든 Token 정보까지 같이 넣어서 요청을 하는 것.

서버는 전달받은 API와, 토큰값을 보고

토큰 값이 이명박회원의 토큰값과 일치하면,  이 요청은 인증된 요청이라고 생각하고 전화번호를 Return 해준다.

 

이것이 바로 토큰을 이용한 인증의 기본적인 개념이다.

(개념이 대강 이렇다는거고 구체적으로는 좀 다르다)

 

### 토큰에 대한 부연설명

참고로..

위 설명만 보면

하나의 ID에 대한 토큰값은 그냥 1개로 고정된 것 처럼 느껴질 수 있는데..

업비트에서 Token을 만들 때 Input은

사실 Key만 있는게 아니다.

UUID 라고 하는 임의의난수 값도  토큰을 만들때 Input  으로 사용되며,

또한 REST API의 파라미터 값들도 Token의 Input으로 들어간다.

 

그래서, Token 값은 REST API를 호출 할 때마다 사실 그 값이 달라진다.

파라미터가 달라져도 달라질 것이고, 또 임의의 난수도 들어가고 이것을 REST API 호출 할 때마다 새로 생성하기 때문에.. 

클라이언트가 서버에게 뭔가를 요청할 때마다 그 토큰의 값은 달라진다.

 

어쨋거나 서버는  요청을 받으면, 그  Token 값을 적절하게 디코딩해서 이게 올바른 값인지를 확인할 것이고,

올바른 값이면 요청에 대한 응답을 클라이언트에게 해줄 것이고, 올바른 값이 아니면 오류를 리턴하거나 응답하지 않을 것이다.

 

 

### 업비트에서 사용하는 토큰의 예시

 

일단은 저런게 있구나 하고만 알자.

위 그림에 대한 상세한 내용은 다음장에서 설명한다.

 

 

 

 

 

 

 

 

 

반응형