JWT Bearer인증방식에 대해서 포스팅을 하겠습니다.
본 포스팅은 저번 포스팅과 연결돼있습니다.
http.csrf.disable설정의 의미는 기본적으로 웹서버에서는 자바스크립트의 공격을 방어하기 위해서 크로스 오리진정첵을 운영하고 있는데 그 설정을 없앤다는 것이다.
바로 밑에
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
는 Stateless를 사용한다는 것은 session을 사용하지 않겠다는 것이다.
기본적인 웹은 stateless를 사용하는데 statfull처럼 느껴지도록 session과 cookie를 사용하는데 jwt서버는 session을 사용하지 않기 때문에 사용하지 않도록 설정해 준 것이다.
formlogin.disable은 form태그로 데이터 주고받는 것을 하지 않겠다는 것이다.
그럼 이번 포스팅에서 이해해야 할 것이 . httpBasic(). disable이다 이것을 이해하면 .addFilter를 이해할 수 있다.
.httpBasic().disable
기본적인 session방식의 웹 로그인 시 메커니즘
클라이언트가 최초에 로그인 요청을 할 때 서버는 session이라는 메모리 영역에 session ID를 하나 만들어서 해당 클라이언트에 대한 session ID를 만들고 그 클라이언트의 영역을 만들어 놓는다.
그리고 id와 pw가 맞다면 sessionID를 응답해 준다. 이때 클라이언트가 웹으로 요청을 했다면 웹브라우저 프로그램 내에 쿠키 영역에 sessionID가 저장되는 것이다.
session의 단점
위 방식의 단점은 서버가 하나일 때는 괜찮은데 서버가 여러 개일 때 문제가 생긴다. 서버마다 session영역이 독립적으로 있기 때문이다.
그리고 a.jax와 같이 자바스크립트로 요청을 하게 됐을 때 발생하는데
쿠키의 기본적인 정책이 뭐냐면 동일 도메인에서만 요청이 올 때 발동을 한다.
그래서 자바스크립트로 요청을 할 때 쿠키 설정을 따로 해주지 않으면 요청 시에 쿠키가 날아가지 않는다. httpolny정첵때문이다. 쿠키를 수정할 수 없도록 만들어 놨기 때문이다.
http basic
그래서 위 session의 고질적인 문제를 해결하기 위해서 headers에 Anthorization이라는 키값에 인증정보(id, pw)를 넣고 가는 방식이 있다 이 방법이 http Basic방식이다.
위와 같이 요청하면 매번 요청 시마다 id와 pw를 header에 담아서 간다.
이렇게 하면 확장성은 좋아지는데 id와 pw가 암호화가 안돼서 보안상의 문제 때문에 https 서버를 써서 데이터를 주고받을 때 암호화될 수 있도록 해줘야 한다.
JWT Bearer인증방식
이번 JWT서버에서 사용하는 방식은
Anthorization : 토큰 이렇게 필드에 토큰을 넣는 것이다.
이렇게 노출이 된다 해도 이 데이터 자체가 id와 pw가 아니기 때문에 위험부담도 준다.
이렇게 header에 토큰을 달고 요청을 하는 방식이 Bearer방식이다. 그리고 이 토큰은 유효시간이 지나면 유효시간마다 새로운 토큰을 서버에서 주기 때문에 훨씬 안전하게 인증을 할 수 있다.
'SpringbootSecurity' 카테고리의 다른 글
SpringbootSecurity/JWT임시 토큰 만들어서 테스트 (1) | 2021.09.28 |
---|---|
SpringbootSecurity/JWT Filter 등록 테스트 (0) | 2021.09.28 |
SpringbootSecurity/JWT를 위한 Security설정 (0) | 2021.09.07 |
SpringbootSecurity/JWT 프로젝트 세팅 (yml설정포함) (0) | 2021.09.07 |
SpringbootSecurity/JWT구조에 대한 이해 (0) | 2021.09.04 |