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 값을 적절하게 디코딩해서 이게 올바른 값인지를 확인할 것이고,
올바른 값이면 요청에 대한 응답을 클라이언트에게 해줄 것이고, 올바른 값이 아니면 오류를 리턴하거나 응답하지 않을 것이다.
### 업비트에서 사용하는 토큰의 예시
일단은 저런게 있구나 하고만 알자.
위 그림에 대한 상세한 내용은 다음장에서 설명한다.
'프로그래밍 관련 > 프로그래밍 관련 잡지식' 카테고리의 다른 글
비트코인에 대하여(2) utxo (2) | 2021.04.21 |
---|---|
비트코인에 대하여(1) 개요 (1) | 2021.04.20 |
리눅스 gcc에 대하여 개요 사용방법 옵션들 (0) | 2021.04.19 |
VS Code. Extension Offline 설치 (0) | 2021.04.19 |
REST API에 대하여(Feat. 업비트 API) (0) | 2021.04.14 |