SpringbootSecurity

SpringbootSecurity/JWT Bearer 인증방식

25G 2021. 9. 23. 17:56

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방식이다. 그리고 이 토큰은 유효시간이 지나면 유효시간마다 새로운 토큰을 서버에서 주기 때문에 훨씬 안전하게 인증을 할 수 있다.