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