이제 웹 애플리케이션 속
JWT와 관련된 변화에 대해 알아보기 시작할 시간입니다
새로운 섹션을 시작하기 때문에
JWT 관련 변경 사항을 수행할
새로운 Maven 프로젝트를 생성해야 합니다
여기 보시다시피 섹션 8과 관련된
프로젝트를 복사하여
같은 폴더에 붙여넣겠습니다
이후에는 이를 springsecsection9로
이름을 변경하겠습니다
변경을 마치면 폴더를 열고
target 폴더로 들어가 비워줍니다
그 다음에 pom.xml을 열어줍니다
pom.xml 안에는
아시다시피 artifact ID와 이름을
최신 프로젝트 이름으로 변경하시면 됩니다
따라서 저는 이 8을 9로 바꿔주겠습니다
이제 여기는 다 됐습니다
pom.xml을 종료하고
이제 Intellij IDEA로 들어가
이 Maven 프로젝트를 가져오기 하겠습니다
여기 저의 IDEA 안에서
File → New → Module from existing sources을 클릭한 후
springsecsection9 폴더 속
pom.xml을 선택합니다
여기를 클릭하겠습니다 가져오기를 한 후에는
여기에 오른쪽 클릭을하여
Build Module 'springsecsection9'을 선택할 수 있습니다
이렇게 하면 Maven 프로젝트가 빌드되고
컴파일 문제가 없다면 Maven 프로젝트 빌드가
성공적으로 완료됩니다
이제 실제로 JWT 관련 변경을
시작하기 전에 이번 강의에서는
dependencies 추가 및 프로젝트 보안 관련 클래스에서
필요한 변경 사항 등을 포함한
사전 작업을 하려고 합니다
이를 해보겠습니다
여기서 첫 번째로 열 파일은 pom.xml입니다
우리는 웹 애플리케이션 내에
JWT 토큰을 활용하기로 했기 때문에
pom.xml 안에
JWT 토큰을 생성하고 유효화하는 데 필요한
dependencies 추가를 해야 합니다
여기 스크롤하여 내리고
여기 dependency 다음에
JWT와 관련된 3개의 새로운 dependencies을 추가할 것입니다
해보겠습니다
보시다시피 이는 제가 pom.xml에 추가한
3개의 새로운 dependencies입니다
GitHub 리포지터리 안에서도 찾을 수 있습니다
이제 변경 사항을 저장한 후 Maven 변경 사항을 로딩하겠습니다
이는 모든 최근 Maven dependencies들을
웹 애플리케이션으로 다운로드 시킬 것입니다
이러한 dependency 관련 변견사항을 만든 이후
다음으로 conflict 패키지 속에 있는
project security conflict 클래스로 들어가야 합니다
여기 이것을 열겠습니다
해당 파일에는 변경해야 하는 사항이 2가지입니다
첫번째로는 보시다시피 현재 Spring Security의 프레임워크에
매번 JSESSIONID를 생성하고
해당 ID를 UI 애플리케이션에
전송하도록 지시했으므로
초기 로그인 이후 UI 애플리케이션이
요청을 만들 때마다 동일한 JSESSIONID를
활용할 수 있습니다
하지만 이제 더이상 Spring Security 프레임워크에서 생성된
JSESSIOINID를 원하지 않습니다
왜냐하면 직접 JWT 토큰들을
생성하고 유효화 하기로 했기 때문입니다
그래서 우리는 Spring Security 프레임워크에게
JSESSIONID를 생성하지 말고
session ID 세부 정보도
저장하지 말아달라고 전달해야 합니다
이를하기 위해 첫번째로
여기 보이는 줄 두개를 삭제해야 합니다
이후에 sessionManagement() 라는 메소드를 호출할 것입니다
여기 두가지 sessionManagement() 메소드가 있습니다
매개변수를 받지 않는
메소드로 호출하십시오
해당 sessionManagement() 메소드 이후로
메소드를 한개 더 호출할 것입니다
SessionCreationPolicy 메소드 입니다
해당 SessionCreationPolicy 메소드에서는
SessionCreationPolicy.STATELESS를 선택해 줍니다
이 Stateless(무상태)로 Spring Security 프레임워크에
스스로 다 해결할테니 JSESSIONID와
history deposition(?)를
생성하지 말아달라고 전달하는 것입니다
해당 사항들을 변경한 후
and() 메소드를 호출하여
session 관련 변경 사항과 Cors 관련 변경 사항을 합칩니다
이렇게 첫번째 변경 사항을 마쳤습니다
두번째로 변경해야하는 부분은
Cors 관련된 구성 속에 있습니다
앞으로의 강의들에서
JWT 토큰들을 생성하기 시작할 때
우리는 해당 JWT 토큰들을
UI 애플리케이션으로 보내야 합니다 그리고 이러한 JWT 토큰을
UI 애플리케이션으로 보낼 때
인가라는 이름의 response 헤더의 도움을 받습니다
UI 애플리케이션의 헤더를 노출하려 하는 것이기 때문에
어쩌구 저쩌구 response 헤더를 보낼테니
받아달라고 브라우저에게 알려야 합니다
그렇지 않으면 브라우저가 해당 헤더를 받지 않고
이 승인 헤더 없이는
UI 애플리케이션이 JWT 토큰을 읽지 못하고
최초 로그인 이후 요청 중에
백엔드로 JWT 토큰을 보낼 수 없습니다
그렇기 때문에 여기에 작은 구성을 만들어야합니다
여기서 바꿔야하는 부분은
여기 setAllowedHeaders 바로 뒤에
새로운 구성을 정의하는 것입니다
보시다시피 setExposedHeaders 메소드를 호출하고
이 ExposedHeaders 메소드에게
UI 애플리케이션에게 보내는 응답의 일부인
헤더의 이름이 무엇인지 보내는 것입니다
우리가 보낼 헤더 이름은 인가 입니다
그리고 같은 헤더 안에
JWT 토큰 값도 함께 보낼 것입니다
백엔드 애플리케이션에서 다른 출처에서
호스팅 되는 다른 UI 애플리케이션으로
헤더를 노출시키기 위해서는
이런 부분을 언급해야 합니다
여기서 왜 CSRF 토큰 헤더에는
왜 똑같이 하지 않았는가와 같은 질문이 생길 수 있을 것입니다 아주 타당한 질문입니다
그것은 프레임워크에서 제공한 헤더이기 때문에
프레임워크가 내부적으로 해결할 것입니다
하지만 여기서 인가는 직접 작성한 헤더로
JWT 토큰에 보낼 것입니다
그렇기에 여기 있는 구성들을 정의해야 하는 것입니다
해당 변경 사항들로 인해
실제로 JWT 토큰을 생성하기 전 필요한
사전 작업들은 끝이 납니다
준비가 완료 되었습니다
JWT 토큰 생성은
다음 강의부터 시작하도록 하겠습니다
그럼 다음 강의에서 뵙겠습니다 감사합니다