[REST API] LogIn GET vs POST

JungChihoon·2020년 7월 29일
12

Node.js

목록 보기
5/5

로그인을 하게 되면 아이디와 비밀번호를 입력하고 요청을 보내면 사용자를 식별할 수 있는 응답을 받아 메인페이지에 진입하게 된다.

여기에서 log in 요청 시 URL에 아이디와 비밀번호를 담아 GET요청을 해야하는지 request body에 아이디와 비밀번호를 담아 POST요청을 해야하는지에 대해 의문이 생겼다.
Database에 정보를 생성하지 않고 사용자 식별 정보를 가져오기 때문에 GET인 것 같기도 하지만 request body에 정보를 담을 수 없기 때문에 URL에 아이디와 비밀번호를 담아서 요청을 보내야하는데 이는 보안상 취약하게 느껴져 POST로 처리를 해야하는지 정확하게 판단하기가 어려움을 느꼈다.

그렇다면 구글링을 통해 참고문서를 찾아 공부를 해보도록 하자.

찾은 참고문서
https://stackoverflow.com/questions/43965316/for-login-get-or-post

참고문서에 따라 결론부터 말하면 GET과 POST 중에서는 POST가 나음. 하지만 바람직한 건 SSL(HTTPS)이다.
우선 둘 중 POST가 나은 이유를 말하자면 GET 요청은 서버 데이터의 상태를 변경하지 않기 때문에 쿼리를 적극적으로 캐싱할 수 있어 아이디와 비밀번호와 같은 정보를 쿼리에 담아 보내게 되면 보안에 취약할 수 있기 때문이다.(다음페이지가 로딩되거나 다른페이지로 이동할때까지 로그파일이나 사용자 브라우저에 일반텍스트로 표시됨)
반면, POST는 서버의 상태를 변경시키고 동일한 응답을 주며 서버를 동일한 상태로 유지하기위해 캐싱을 하지 않기 때문에 GET보다는 보안에 용이할 수 있다.
예를 들면 5번의 로그인에 실패했을 때 6번째 요청은 "당신의 IP는 30분동안 차단되었습니다." 라고 응답할 수 있다.
하지만 가장 좋은 방법은 SSL(https)로 처리하는 방법이다.

https://stackoverflow.com/questions/5868786/what-method-should-i-use-for-a-login-authentication-request
여기에서 비슷한 이유로 logout을 할 때 GET 요청과 POST 또는 DELETE 요청을 하는 것 중 어떤 것을 사용해야하느지에 대한 논쟁을 보았다. session을 삭제할 뿐 정보의 변경은 없다는 주장의 GET 사용 RESTful한 요청은 DELETE요청(session을 삭제하므로)라는 주장들이 보였다.
내가 생각하는 점은 REST API에 꼭 맞는 API설계도 중요하지만 보안의 용이함과 사용자의 편의성 등 여러가지를 고려해 결정하는 것이 맞지않을까라는 생각을 했다.

profile
주니어 개발자

0개의 댓글