Post

API 서버

API 서버

API서버

API서버는 쉽게 말해 ‘필요한 데이터만 제공하는 서버’를 의미하며, API서버는 뷰어(화면)를 제공하는 것이 아닌 데이터를 호출하여 결과를 리턴 받는 방식으로 동작하기 때문에 API서버의 가장 큰 특징은 "화면 제공 X"이다.

그리고 그외의 특징은 무상태(stateless)라는 것인데 이것은 API서버의 특징이라기보다는 RESTHTTP의 특징이기에 개발을 하면서 주의가 필요하다.

마지막으로 API서버쿠키를 이용해서 데이터를 교환하는 방식이 아닌 단순히 요청(request)응답(response)의 방식으로 구성되었다.


토큰 기반의 인증

위에서 설명한 것처럼 단순히 데이터만 주고받는 특징 때문에 누구나 호출하는 URL를 제3자가 알게 되면 보안에 문제가 생기게 된다.
그래서 API서버에 다양한 방법으로 특정한 사용자나 프로그램에서만 API서버를 호출할 수 있도록 제한하는 방법들이 있고, 그 중에 하나가 토큰(token)을 이용하는 방식이다.

토큰(token)은 서버와 클라이언트가 주고받는 문자열에 불과지만 입장권과 같은 역할을 하는 데이터이다.
API서버를 이용하고자 하는 사용자들은 API서버에서 토큰을 받아 보관하다가 호출할 때 보관한 토큰을 같이 전달하면 API서버에서 확인하는 방식이다.


Access Token / Refresh Token

이러한 입장권에 해당하는 토큰(token)Access Token이라고 한다.
Access Token은 특정한 자원에 접근할 권한이 있는지 검사하기 위한 용도이며, API서버를 호출할 때 Access Token을 전달하면 서버에서 이를 검증하고 결과에 따라 요청을 처리한다.

하지만 Access Token이 소유자가 아닌 제3자에게 유출된다면 문제가 발생할 것이다.
그렇기에 Access Token의 유효 시간을 최대한 짧게 지정하여 만약 Access Token의 기간이 만료된다면 새로 발급받을 수 있게 Refresh Token이라는 것을 같이 생성하여 Access Token을 다시 발급할 수 있게 한다.

예를 들어 Access Token의 기간이 1일, Refresh Token의 기간이 10일이라고 한다면, 사용자가 Access Token을 전달하여 서버에서 전달 받은 토큰을 검사하고 유효한지 확인해서 작업을 처리한다.
만약 Access Token의 기간이 만료되었다면 서버는 사용자에게 Access Token의 기간이 만료되었다고 알려주고 사용자는 Refresh Token을 전송해서 새로운 Access Token을 요구할 때 서버에서 사용자의 Refresh Token에 문제가 없다면 새로운 Access Token을 생성해서 전달한다.
이 과정에서 Refresh Token의 기간이 만료되어 간다면 새로운 Refresh Token을 같이 전달할 수도 있다.


문제점

물론 토큰을 이용하는 방식 또한 네트워크로 데이터를 주고받는 방식이기 때문에 항상 보안에 문제가 있다.
Access TokenRefresh Token이 유출된다면 API서버에서는 사용자를 구분할 수 없는 문제가 발생하고 만다.

그래서 이 문제의 현실적인 대안으로 Refresh Token으로 새로운 Access Token이 생성이 된다면 원래의 사용자가 알 수 있도록 하는 방법이 쓰이고 있다.

예시로 네이버나 구글 로그인을 할 때 평소 장소가 아닌 다른 곳에서 시도할 경우 자신이 한 것이 맞는지 설정한 연락수단(휴대폰, 이메일)으로 발송되는 것이 예의 사례인데 이처럼 원래의 사용자에게 활동 여부를 알려주거나 특정한 IP에서만 사용할 수 있도록 조금 더 안전하게 만들 수 있다.


This post is licensed under CC BY 4.0 by the author.