브라우저 인증 기술(JWT, Session)

James·2021년 7월 15일
0

기술정리

목록 보기
3/4

인증이란 무엇인가?

‘인증’이란 어떤 정보가 어떤 자에게 유일하게 속한다는 사실을 확인하고 이를 증명하는 행위를 뜻합니다.

웹 서버에 인증 기술이 왜 도입되었는가?

기본적으로 웹 서버는 Stateless 프로토콜인 http를 이용하여 통신을 하기 때문에 별도의 기술을 도입하지 않으면 사용자는 로그인해서 서버에 요청을 할 때 마다 재로그인을 해야 하는 불편함을 겪어야만 합니다.
그래서 이 불편함을 해소하기 위해 브라우저에 사용자 정보를 저장했다가 서버에 재요청 시 그 정보를 서버에 다시 넘겨줘서 인증을 유지할 수 있는 쿠키라는 인증수단을 사용 했습니다.

그럼 세션 인증 기술은 왜 도입 되었는가?

쿠키 인증 방식은 사용자 정보를 브라우저에서 관리하고 있기 때문에 해커로부터 쉽게 개인 정보를 탈취당할 수 있는 위험성이 있습니다.
그래서 이를 해결하기 위해 세션 인증 기술이 도입 되었습니다.
쿠키라는 정보 운송 수단은 그대로 이용하되 처음 인증이 일어나면 서버에서는 세션이라는 정보 보관함에 사용자 정보를 임시로 저장하고 쿠키에 Session ID를 담아서 브라우저에 응답해주면, 사용자가 재요청을 할 때 쿠키에 담긴 Session ID가 서버에 존재하면 인증이 유지되는 방식입니다.
서버가 사용자 정보를 보관하고 있기 때문에 쿠키만을 이용해서 인증을 유지하는 방식보다 보안이 강화되었다고 할 수 있습니다.
하지만, 서버에 사용자 정보를 보관해야 하기 때문에, 사용자가 많은 서비스의 경우 서버 부담이 커져 원활한 트래픽 처리에 어려움을 겪을 수 있습니다.

그래서 JWT 인증이 도입된 것인가?

맞습니다. 오직 세션 인증기술만을 고집하기엔 서버 부담이 크고, 그렇다고 쿠키만을 사용하기엔 보안 문제가 대두되어 적절한 타협점을 잡은 인증 기술로 나온 것이 JWT라고 생각됩니다.
JWT(Json Web Token) 인증의 특징은 사용자 정보를 브라우저에서 Token의 형태로 보관하며 이 Token은 암호화되어 있다는 것입니다. 그래서 세션인증의 단점인 서버 부하를 줄이고, 쿠키인증의 단점인 사용자 정보를 그대로 노출하지 않도록 한 것입니다.

작동방식은 다음과 같습니다.
1. 처음 인증을 했을 때, 서버에서 Access Token과 Refresh Token을 각각 만들어서 브라우저에게 응답을 줍니다.
2. API요청 시 header에 Access Token을 담아서 서버에 보내고 서버는 이 Access Token에 대해 서버에서 보관하고 있는 Secret key를 가지고 복호화하여 Verification 후 인증을 유지시킵니다.
3. 만약 Access Token이 만료되면 만료되었다는 신호가 브라우저로 가고, 브라우저는 Refresh Token을 서버에 자동으로 보내면 서버는 새로운 Access Token을 만들어서 브라우저에 보내줍니다.

JWT가 그럼 가장 좋은 인증 방식인가?

쿠키와 세션인증 방식을 보완했다고 해도 가장 좋은 인증 방식이라 말할 수는 없습니다.
JWT는 단점은 아래와 같습니다.
1. 세션 인증방식에 비해서 복잡한 인프라를 설계해야만 합니다.
2. Access Token을 탈취당할 경우 역시 해킹의 위험을 피할 수 없습니다.
3. 세션 인증방식은 로그아웃 시 자동으로 세션이 만료되지만 JWT는 설정한 만료시간 동안은 지울 수 없습니다.

결론

세션인증과 JWT 인증의 장단점을 정확히 알고 선택할 수 있어야 한다.
JWT구현은 세션에 비해 복잡하기 때문에 도입 시 특히나 명확한 이유를 가지고 신중하게 선택해야 한다.
보안 vs. 편리함, 서버 부담 vs.클라이언트 부담 등을 진행하는 서비스 특성에 맞게 인증 방식을 고려해야 한다.

profile
웹개발자 James 입니다.

0개의 댓글