본문 바로가기

공부/개념 정리

[Spring] Authentication과 Authorization

AuthenticationAuthorization에 대해 알아보자.

 

[Authentication]

한국말로 인증이다. 해당 사용자가 우리가 알고있는 사용자인지 확인 하는 것. ex) 로그인, 지문인식

 

[Authorization]

한국말로 인가. 사용자의 권한에 대한 이야기이다. 관리자인지? 회원인지? 비회원인지?를 가려야 하는 것.

권한에 따라 인가되는 정보가 달라진다.

 

웹 어플리케이션에서 인증과 인가은 어떻게 이루어질까?

 

[비연결성과 무상태]

비연결성과 무상태

<비연결성>

웹 서버에서 클라이언트와 서버가 한번 연결 된 후 클라이언트가 연결을 끊기 전까지 둘 사이의 연결은 지속 되지 않는다. 그 이유는 서버에 부담이 많이 가기 때문이다. 실제로 클라이언트와 서버간의 통신은 요청이 들어올 때 응답을 하고 통신을 끊고, 다시 요청이 들어오면 응답을 하고 연결을 끊는다. 

<무상태>

무상태 상태란 서버는 기존과 연결되어 있는 상태가 아닌 상태를 저장하지 않는다는 것.

클라이언트와 서버간의 통신은 연결성이 존재한다. 첫번째 요청으로 로그인한 사용자가 있다고 하자. 그 다음 요청으로

"회원만에게 인가된 정보"를 요청할 때 서버에서는 회원의 권한을 확인하고 응답해야 한다.

하지만 이렇게 매번 사용자의 인가를 확인하는 것은 서버에 무리를 준다. 따라서 우리는 서버를 <무상태>상태로 사용한다. 

 

하지만 우리가 브라우저를 보면 연결이 지속되는 것처럼 보인다.

개발자들은 실제로는 끊겨있는 연결을 마치 연결 되어 있는 것 처럼 꾸미기 위한 방식을 택했다.

 

[쿠키-세션 방식]

쿠키-세션 방식

첫번째 로그인이 된 순간 서버의 세션 저장소에 로그인된 상태를 저장한다. 서버에 회원세션을 생성하고, 클라이언트에 세션id를 쿠키에 담아 응답한다. 그럼 사용자의 두번째 요청에서 쿠키에 세션 id가 담겨서 왔을 때, 세션 저장소에서 쿠키를 검증하고, 클라이언트는 인증/인가가 통과된 정보를 응답받는다. 하지만 이방식은 여전히 서버에 사용자의 로그인

"상태"를 저장해야 하는 세션 저장소가 필요하다.

 

[JWT 기반 인증]

JWT 기반 인증

첫번째 요청으로 사용자가 로그인을 할 때, 서버에서는 사용자를 확인 후, JWT 토큰을 쿠키에 담아서 클라이언트에 응답한다. 로그인 된 사용자는 아까 받았떤 JWT 토큰이 담긴 쿠키를 다시 요청한다. 그때 요청받은 토큰을 재확인 후 인증이 완료되면 사용자에게 맞는 데이터를 응답한다. 

이 방식은 위에 말했던 무상태를 지키는 방식이라고 할 수 있다. 서버는 사용자의 상태를 저장하지 않고도, 사용자의 인증/인가 확인 상태를 판단이 가능하기 때문.