인프런 커뮤니티 질문&답변

전정환님의 프로필 이미지
전정환

작성한 질문수

스프링 시큐리티

로그인 Ajax 처리시 서버 토큰 가져오는 방법

작성

·

576

0

안녕하세요.

Vue + Spring Security 를 이용하여 사이트를 구성하고 있는데요. (csrf 이용)

궁금한게 있어 문의드립니다.

1) Spring Security 토큰이 생성되는 시점이 언제인가요? 로그인 성공 후?

2) 로그인 성공후 ajax 로 토큰을 내려줘야 할꺼 같은데 서버에서 어떻게 내려줘야 할지 모르겠습니다.

3) 로그인 후 접속할때마다 토큰이 계속 바뀌는 건가요? 그렇다고 한다면 접속할때마다 서버에서 토큰값을 내려주는 코드를 모든 api에 넣어줘야 할까요??

답변 3

0

정수원님의 프로필 이미지
정수원
지식공유자

1) Spring Security 토큰이 생성되는 시점이 언제인가요? 로그인 성공 후?

   - 토큰을 생성하는 필터인 CsrfFilter 는 매 요청마다 실행되어 토큰 생성 구문을 실행하게 되는데 먼저 세션에 토큰이 존해하는지 확인 후 토큰이 존재할 경우에는 생성하지 않고 존재하지 않을 경우에는 새롭게 생성하게 됩니다.

즉 서버에서 클라이언트로 응답할 때 랜덤으로 생성된 Token을 같이 요청객체에 담아서 전달하게 되고 사용자 세션에 저장합니다. 그리고 사용자가 서버에 작업을 요청할 때 페이지에 Hidden으로 숨어있는 Token 값이 같이 서버로 전송되는데, 서버에서는 이 Token 값이 세션에 저장된 값과 일치하는지 확인하여 일치한다면 접속을 허용하고 이후 요청부터는 세션에 저장된 토큰을 계속 사용하게 됩니다

그리고 새롭게 로그인을 하게 되면 세션에 저장된 토큰을 삭제하고 다시 토큰을 생성한 후 세션에 저장한 후 클라이언트로 발급하게 됩니다.

그리고 위의 과정을 반복하게 됩니다.

2) 로그인 성공후 ajax 로 토큰을 내려줘야 할꺼 같은데 서버에서 어떻게 내려줘야 할지 모르겠습니다.

 - 토큰은 CsrfFilter 에서 내부적으로 Request 객체에 담아서 응답으로 보내게 되므로 별도로 클라이언트로 토큰을 보내는 로직을 구현할 필요는 없습니다. 화면단에서 jstl 등의 구문으로 값을 얻어와서 사용하시면 됩니다.

3) 로그인 후 접속할때마다 토큰이 계속 바뀌는 건가요? 그렇다고 한다면 접속할때마다 서버에서 토큰값을 내려주는 코드를 모든 api에 넣어줘야 할까요?

 

- 위에서 설명한 것 처럼 세션에 저장된 토큰이 삭제될 경우에 새로운 토큰이 발급됩니다.

thymeleaf 나 spring form 태그를 사용한다면 자동적으로 토큰이 설정되기 때문에 일일히 구문을 작성할 필요는 없지만 그 외에 post, put, delete 와 같은 http 메소드 방식을 사용한다면 각 페이지나 api 호출 시 토큰을 설정해서 서버로 전송해야 합니다.

이 부분을 공통화 할 수 있으면 좋습니다.

0

전정환님의 프로필 이미지
전정환
질문자

0

정수원님의 프로필 이미지
정수원
지식공유자

Csrf 토큰 말씀이신가요?

전정환님의 프로필 이미지
전정환

작성한 질문수

질문하기