티스토리 뷰

반응형

해결하는데 3시간 정도 걸린거 같다.....  관련 경우의 수를 다 적어놨다... !!!! 하나씩 따라해보자.

 

 

 

 

문제 상황

포스트맨에서 아래와 같은 에러가 발생했다.

 

 

 

 

장고를 활용해서 DRF로 구현을 해서 postman을 사용했는데, 갑자기 CSRF 오류가 뜨기 시작했다.....

 

 

 

위와 같이 쿠키를 보면 csrftoken이 떠있는 것을 알 수 있다. 외부 포트에서 작업을 수행할 때마다 csrftoken을 얻어서 테스트 시마다 토큰값을 적어줘야하는 것이었다...

 

 

 

 

문제 원인

장고는 기본적으로 보안을 위해 CSRF 보호 메커니즘을 가지고 있다. POST 메서드에서 CSRF 보호가 자동으로 활성화되면, header부분에  X-CSRFToken을 키로 적고, 위에서 받은 csrftoken의 value값을 값으로 추가로 적어서 아래와 같이 보내줘야한다.

 

 

그런데 여기서 문제는 csrftoken이 보낼떄 마다 바뀌기 때문에 새로운 토큰 값을 계속 수정해 줘야한다는 것이다.... 그래서 자동화를 해보고자 한다.

 

 

 

 

해결방법 1

포스트맨의 Tests 부분에 우선 코드를 쳐야한다. 첫번째 찾은 코드는 아래와 같다. 결론부터 말하면 나는 이거 안된다.

 

 

var xsrfCookie = postman.getResponseCookie("csrftoken"); 
postman.setEnvironmentVariable('csrftoken', xsrfCookie.value);

 

그런다음 Header로 가서 지정해둔 변수를 아래와 같이 적어준다.

 

 

key가 X-CSRFToken을 추가한 것이다! 그리고 위에서 지정한 csrftoken을 중괄호로 넣어준다. 

 

이것이 안된다면, 아래를 보자.

 

 

 

해결 방법2

Test 부분만 아래와 같이 변경해 보자.

 

var csrf_token = postman.getResponseCookie("csrftoken").value
postman.clearGlobalVariable("csrftoken");
postman.setGlobalVariable("csrftoken", csrf_token);
pm.environment.get("variable_key");

 

그리고 다시 POST보내보자! 안된다면 방법3을 참고하여 좀 더 간단한 코드로 바꾸자.

 

 

 

해결 방법3

Tests 부분을 아래와 같이 변경하자.

 

var xsrfCookie = postman.getResponseCookie("csrftoken"); 
postman.setGlobalVariable('csrftoken', xsrfCookie.value);

 

이렇게 두줄로 Tests를 적어주면 쿠키로 받은 csrftoken을 변수로 담아서 {{csrftoken}}으로 header에서 사용가능하다.

 

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함