※ 모든 REST API보안관련된 내용은 거의 내용이 비슷하다고 봐도 무방할정도로 조대협님의 블로그를 참고하였다. 쉽고 자세하게 설명이되 있어서 .. 블로그 구독을 눌렀다. (조대협님의 블로그)
근래에 대부분의 서비스 시스템들은 API를 기반으로 통신을 한다.
보안에 관하여 알아보자.
REST API 보안 관점
크게 아래와 같은 5가지 형태로 나눠진다.
1. 인증(Authentication)
누가 서비스를 사용하는지를 확인하는 절차이다.
우리가 네이버나 구글에 아이디와 비밀번호를 넣어서, 사용자를 확인하는 과정
을 인증이라 할 수 있다.
API도 마찬가지로 API를 호출하는 대상을 확인하는 절차가 필요하고 이를 API 인증이라 한다.
2. 인가(Authorization)
인가는 해당 리소스에 대해서, 사용자가 그 리소스를 접근, 사용할 권한이 있는지 체크
하는 과정이다. (권한 체크 과정)
예를 들면, 사용자 정보를 보고싶을 때, 일반 사용자는 자신의 정보만 볼 수 있지만, 관리자 권한을 가진 사용자는 모든 사용자 정보를 볼 수 있는 차이를 의미한다.
3. 네트워크 레벨 암호화
인증, 인가 과정이 끝나여 API를 호출하게 되면 네트워크를 통해서 데이터가 오고가게 되는데, 해커 등이 네트워크 통신을 중간에 낚아채서 데이터를 볼 수 없게 할 필요가 있다. (스니핑 방지)
이 처럼 네트워크 프로토콜단에서 처리하는 것
을 네트워크 레벨의 암호화라고 하며, HTTP에서 네트워크 레벨 암호화는 HTTPS를 사용하는 경우가 많다.
4. 메시지 무결성 보장
메시지 무결성이란, 메시지가 중간에 외부 요인에 의해 변조가 되지 않게 방지
하는 것을 이야기 한다.
(송신자가 보낸 데이터와 수신자가 받은 데이터가 같음을 보장해야 한다.)
무결성을 보장하기 위해서 많이 사용하는 방식은 메시지에 대한 Signature를 생성해서 메시지와 같이 보낸 후에 검증하는 방식을 사용한다.
예를 들면 문자열과 이 문자열에 대한 해시코드를 생성해서 함께 보낸 후 수신쪽에서 받은 문자열의 해시코드를 구해서 송신자가 보낸 해시코드와 비교하여 데이터가 변조되었는지를 확인할 수 있다.
만약 네트워크 레벨 암호화를 완벽하게 사용한다면 사용할 필요가 없다.
5. 메시지 본문 암호화
네트워크 레벨 암호화를 사용할 수 없거나, 네트워크 레벨의 암호화를 신뢰할 수 없는 경우 추가적으로 메시지 자체를 암호화
하는 방법을 사용한다.
애플리케이션 단에서 구현하며, 전체 메시지를 암호화 하는 방법과 특정 필드만 암호화하는 방법이 있다.
전체 메시지를 암호화할 경우, 암호화에 소요되는 비용이 클 뿐더라 중간에 API Gateway등을 통해서 메시지를 열어보고 메시지 기반으로 라우팅 변환하는 작업등이 어렵기 때문에 일반적으로 전체를 암호화 하기 보다는 보안이 필요한 특정 필드만 암호화 하는 방법을 사용한다.
'프로그래밍 노트 > WEB' 카테고리의 다른 글
REST API 보안_인가(Authorization) (0) | 2019.06.07 |
---|---|
REST API 보안_인증(Authentication) (0) | 2019.06.07 |
REST API 디자인 가이드 (0) | 2019.05.18 |
REST API에 관한 고찰 (0) | 2019.05.18 |
HTTP란? (HTTP Message Format, Request Message & Response Message) (0) | 2019.05.13 |