Authentication과 Authorization에 대해 알아보자.
[Authentication]
한국말로 인증이다. 해당 사용자가 우리가 알고있는 사용자인지 확인 하는 것. ex) 로그인, 지문인식
[Authorization]
한국말로 인가. 사용자의 권한에 대한 이야기이다. 관리자인지? 회원인지? 비회원인지?를 가려야 하는 것.
권한에 따라 인가되는 정보가 달라진다.
웹 어플리케이션에서 인증과 인가은 어떻게 이루어질까?
[비연결성과 무상태]
<비연결성>
웹 서버에서 클라이언트와 서버가 한번 연결 된 후 클라이언트가 연결을 끊기 전까지 둘 사이의 연결은 지속 되지 않는다. 그 이유는 서버에 부담이 많이 가기 때문이다. 실제로 클라이언트와 서버간의 통신은 요청이 들어올 때 응답을 하고 통신을 끊고, 다시 요청이 들어오면 응답을 하고 연결을 끊는다.
<무상태>
무상태 상태란 서버는 기존과 연결되어 있는 상태가 아닌 상태를 저장하지 않는다는 것.
클라이언트와 서버간의 통신은 연결성이 존재한다. 첫번째 요청으로 로그인한 사용자가 있다고 하자. 그 다음 요청으로
"회원만에게 인가된 정보"를 요청할 때 서버에서는 회원의 권한을 확인하고 응답해야 한다.
하지만 이렇게 매번 사용자의 인가를 확인하는 것은 서버에 무리를 준다. 따라서 우리는 서버를 <무상태>상태로 사용한다.
하지만 우리가 브라우저를 보면 연결이 지속되는 것처럼 보인다.
개발자들은 실제로는 끊겨있는 연결을 마치 연결 되어 있는 것 처럼 꾸미기 위한 방식을 택했다.
[쿠키-세션 방식]
첫번째 로그인이 된 순간 서버의 세션 저장소에 로그인된 상태를 저장한다. 서버에 회원세션을 생성하고, 클라이언트에 세션id를 쿠키에 담아 응답한다. 그럼 사용자의 두번째 요청에서 쿠키에 세션 id가 담겨서 왔을 때, 세션 저장소에서 쿠키를 검증하고, 클라이언트는 인증/인가가 통과된 정보를 응답받는다. 하지만 이방식은 여전히 서버에 사용자의 로그인
"상태"를 저장해야 하는 세션 저장소가 필요하다.
[JWT 기반 인증]
첫번째 요청으로 사용자가 로그인을 할 때, 서버에서는 사용자를 확인 후, JWT 토큰을 쿠키에 담아서 클라이언트에 응답한다. 로그인 된 사용자는 아까 받았떤 JWT 토큰이 담긴 쿠키를 다시 요청한다. 그때 요청받은 토큰을 재확인 후 인증이 완료되면 사용자에게 맞는 데이터를 응답한다.
이 방식은 위에 말했던 무상태를 지키는 방식이라고 할 수 있다. 서버는 사용자의 상태를 저장하지 않고도, 사용자의 인증/인가 확인 상태를 판단이 가능하기 때문.
'공부 > 개념 정리' 카테고리의 다른 글
[Spring] Entity 연관관계 (1) | 2023.11.15 |
---|---|
[Java] Optional을 쓰는 이유 (0) | 2023.11.13 |
[Spring] Filter의 개념 (0) | 2023.11.13 |
[Spring] Bean의 쓰임과 수동 등록에 대해 (0) | 2023.11.10 |
Java) Comparable과 Comparator의 차이에 대해 (1) | 2023.10.18 |