REST API 사용을 위한 인증 방법 4가지
Stateless 한 REST API 를 사용하기 위해서는 4가지의 인증방법이 있다. Basic Authentication, Token Authentication, API Key & Secret Authentication, OAuth2.0(Open Authorization) 이 그것이다.
1. Basic Authentication
HTTP 표준 사양에 따라 매 요청시 헤더의 Authorization 필드에 아이디와 패스워드를 넘겨주는 방식으로 사용자를 인증하는 방식이다.
이 방식은 보안상 매우 취약하고 탈취가 쉽다.
특히 SAP 방식에서는 자바스크립트 코드가 그대로 드러나기 때문에 더 위험하다.
2. API Token Based Authentication
프로세스
API 클라이언트는 사용자의 아이디와 비밀번호로 로그인을 하여 API 토큰을 요청한다.
API 인증서버는 사용자의 아이디와 비밀번호를 바탕으로 사용자를 인증한다.
인증된 사용자에 대해서 유효시간이 정해진 API 토큰을 발급한다.
API 클라이언트는 매 API 호출시마다 해당 토큰을 포함하여 요청한다.
API 서버는 토큰이 유효한지 토큰관리서버에 문의하고 유효할 경우에만 API 호출을 허용한다.
유효하지 않으면 다시 토큰을 발급받도록 처리한다.
특징
API Key 방식보다 보안적으로 뛰어나다.
아이디와 비밀번호가 노출되지 않으므로 토큰이 탈취당하더라도 사용자의 정보는 안전하다.
토큰에는 짧은 유효기간이 있기 때문에 탈취당한 토큰 마저도 일정 시간 이후에는 무효화된다.
보통 토큰에 날자와 시간을 함께 인코딩하여 특정 시간 이후로 사용 불가하게 한다.
Stateless 하다. 서버에서 세션 등 상태를 기억하지 않으므로 클라이언트에서 오는 요청만 처리한다. 클라이언트와 서버가 완전히 때문에 확장성이 높아지게 된다.
모바일 어플리케이션은 쿠키나 세션 등의 인증시스템을 사용할 수 없는데, 토큰 인증 방식은 이를 간단하게 해결할 수 있다.
대표적으로 JSON Web Token(JWT)가 있다. key-value 페어로 이루어지고 claims 라고 불린다.
3. API Key & Secret Authentication
프로세스
API 제공자로부터 임의의 문자열을 발급받는다.
API 요청시 해당 문자열을 포함하여 요청한다.
서버는 메시지 내부의 API 키를 읽어서 누가 호출한 API인지를 확인한다.
해당 Key의 인증과 인가에 따라 사용자에게 응답한다.
특징
클라이언트가 API에 접근하기 위해서 API 에 가입하는 과정이 필요하다.
가입하면 API 서버가 Key와 Secret 을 각각의 가입된 클라이언트에게 부여한다. 이 부여된 Secret 으로 클라이언트는 서버에 접근할 수 있다.
구현이 간단하다.
보안상 취약하다.
웹, 모바일 등 모든 클라이언트가 같은 API 키를 공유하기 때문에 한번 API 키가 노출되면, 전체 API가 뚫려버린다. 높은 인증이 필요할 때는 권장하지 않는다.
통신구간이 암호화가 잘 되어있더라도 Key 가 유출될 경우 대비하기 힘들다.
이를 방지하기 위해 주기적으로 key도 업데이트 해야하는 번거로움이 있다.
그마저 클라이언트와 서버의 Key 업데이트 싱크가 맞지 않으면 서로 매치가 안되는 등 예기치 못한 상황이 발생할 수도 있다.
모든 클라이언트에게 매번 부여하기가 어렵다. 즉, 고정된 키이다.
4. OAuth2.0(Open Authorization)
프로세스
은행에 접근해서 아이디를 제출한다.
은행은 해당 아이디의 리소스 접근 권한이 필요하다고 요청한다.
은행은 다른 권한 제공 업체를 통해 엑세스 토큰을 마이크에게 제공한다.
마이크는 은행에 해당 엑세스 토큰과 함께 아이디를 다시 제공한다.
은행은 해당 토큰과 아이디로 마이크의 접근을 허용한다. 그리고 이를 권한 제공 업체가 보증한다.
특징
API Key 방식이나 API Token 방식에 비해 보안상 안전하다.
참고
Last updated