본문 바로가기
인증과 인가

인증과 인가, 더 이상 헷갈리지 말자!

by NewCodes 2024. 9. 16.

 

안녕하세요!

NewCodes입니다!

 

 

인증과 인가에 대해

저번에 공부한 적이 있었는데요. 

 

몇 개월 뒤에 다시 보니

잘 기억이 안 나더라고요 ㅎㅎ..

 

 

그래서 이번 기회에

확실히 기억하고 싶어서 이렇게 정리합니다!

 

 

이 글의 목적은 해당 본문만 봐도

인증과 인가에 대해 큰 그림

그려질 수 있도록 하는 것입니다!!

 

 

시작하겠습니다!!

 

 


🔐 인증 (Authentication)

인증하는 과정!

 

인증이란 '사용자가 누구인지 증명'하는 과정입니다. 

 

 

인증은 흔히 로그인을 통해 이루어집니다. 사용자가 계정과 비밀번호를 입력하면, 서버에서는 유효한 사용자가 맞는지 확인합니다. 

 

요새는 FaceID, 지문인식 등을 통해 인증이 이루어지기도 합니다. 

 

인증에서 핵심은 '내가 누구인지를 증명'하는 것이고, 로그인과 FaceID 등은 인증을 위한 수단입니다. 

 

 

인증의 예시

네이버 카페와 같은 커뮤니티에 예를 들어 보겠습니다.

 

이런 창 한 번씩 보신 적이 있으실 텐데요! 

 

카페 멤버에게만!

 

 

이 게시물을 보려면, 해당 카페의 회원임을 인증해야 볼 수 있습니다.

 

인증하지 않은 사용자는 볼 수가 없죠. 

 

즉, 로그인을 통해 이 카페의 회원이라는 걸 인증해야 게시물을 볼 수 있습니다. 

 

 


🛡️ 인가 (Authorization)

인가는 역할 부여!

 

인가인증된 사용자에게 '권한을 부여'하는 과정입니다. 

 

 

인가에 대해서는 사용자가 별도로 요청할 게 없습니다.

 

서버에서 각 사용자마다 저장되어 있던 권한이 알아서 부여됩니다. 

 

 

인가의 예시

이 또한 네이버 카페로 예를 들어보겠습니다.

 

네이버 카페를 이용해 본 분이라면 아래 화면을 한 번쯤은 보셨을 겁니다. 

 

등급에 따라!

 

내가 어떤 등급인지에 따라 특정 글을 볼 수 있는지 없는지가 결정됩니다. 서버에서는 적절하게 사용자마다 등급을 정해두고 이에 맞는 권한을 부여하죠. 

 

권한이란 웹에서는 주로 특정 컨텐츠에 대해 CRUD할 수 있는 권한을 말합니다. (create, read, update, delete)

 

쉽게 말하면 해당 웹에서의 역할을 부여하는 과정입니다. 역할에는 일반 사용자, 관리자, 매니저 등이 있습니다. 

 

 


⭐️ 인증과 인가의 핵심

개발자 입장에서 인증과 인가를 구현할 때 신경 써야 할 부분이 크게 두 가지라 생각합니다. 

 

 

첫 번째는, 보안입니다. 

인증은 사용자의 정보가 필연적으로 오가게 됩니다. ID, Password 등 사용자의 중요한 정보가 최대한 안전하게 오고 갈 수 있도록 해야 합니다. 

 

인가 또한 마찬가지입니다. 일반 user가 admin 권한을 가지게 해서는 안 됩니다. 

 

또한 사용자가 회원가입할 때, 사용자의 비밀번호를 평문 그대로 저장해서는 안 됩니다. 만에 하나 DB가 탈취되었을 때를 대비해 비밀번호와 같은 사용자의 중요한 정보는 암호화해두어야 합니다. 이때 보통 솔트값을 포함한 해시가 많이 사용됩니다. 

 

이외에도 다방면에서 보안적인 약점이 무엇이고, 이를 어떻게 대처할 것인지에 대한 대책이 필요합니다. 

 

 

두 번째는, 로그인 유지입니다. 

매 요청을 할 때마다 로그인을 다시 해야 하는 서비스가 있다면, 그 서비스를 이용하는 사람은 없을 겁니다.

 

사용자가 편하게 서비스를 이용하기 위해서는 '로그인 유지'가 될 수 있게 해야 합니다. 

 

사용자가 로그인을 통해 인증을 한 후, 인증 상태를 유지하기 위한 기술에 대한 필요성이 대두됩니다. 그래서 세션, JWT와 같은 개념이 나오게 됩니다.

 

session과 JWT

 

'인증과 인가' = '세션, JWT'로 봐서는 안 됩니다. 세션, JWT는 '로그인과 같은 상태 유지'를 위해서 필요한 개념입니다. 

 

세션이란 서버가 클라이언트의 상태를 유지하기 위한 개념입니다. 사용자가 로그인을 하게 되면 고유한 sessionID가 부여되고, 서버에서는 sessionID와 해당 사용자를 매핑해서 기억하고 있습니다.

 

사용자가 로그인 한 이후 서버에게 특정 웹페이지에 대한 요청을 할 때 sessionID도 함께 보냅니다. 서버에서는 요청에 들어있는 sessionID를 통해 사용자를 구분합니다. 이를 통해 인증된 사용자라는 걸 알 수 있고, 적절한 응답을 보내주게 됩니다. 

 

정리해보면 세션은 서버 중심의 상태 관리라고 할 수 있습니다. 반면에 JWT는 클라이언트 중심의 상태 관리 기술입니다.

 

세션과 JWT 관련해서는 다음 글에서 더 자세하게 다뤄보겠습니다!

 

처음 이 개념을 접하신다면 한 번에 이해가 안 되는 게 당연한 겁니다! 저도 처음 배울 때는 어질어질 했네요 ㅎㅎ..

 

 

 


🎯 총정리

인증과 인가

 

인증과 인가, 다시 한번 정리해 봅시다!

인증

 : '사용자가 누구인지 증명'하는 과정

 

인가

 : 인증된 사용자에게 '권한을 부여'하는 과정

 

 

제 언어로도 정리해 보겠습니다!

인증

  • 사용자: "나 이 웹에 들어가고 싶어 🥺"
  • 서버: "너 누구야? 🧐 ID랑 Password 입력해!"
  • 사용자: "입력했어~ 😊"
  • 서버: (유효한 사용자라면) "오케이! 너 들어와도 돼 ㅎㅎ 🤗"
  • 서버: (유요한 사용자가 아니라면) "입구컷! 넌 들어올 수 없어! 😡"

 

 

인가

  • 사용자: "나 이 게시판에 글 쓰고 싶어! ✋"
  • 서버: "너 역할이 뭐지? 🧐 잠시만."
  • 서버: (글 쓸 권한이 있는 사용자라면) "오케이 그건 가능! 🤗"
  • 서버: (글 쓸 권한이 없는 사용자라면) "안 돼! 넌 그건 못해! 😡"

 


레퍼런스

이미지 출처

 

이상입니다!!

 

혹시 사소한 거라도 궁금한 점이 있다면 댓글 남겨주세요~!

 

 

다음 읽으실 글로 

'세션으로 인증하는 방법'에 대한 글을 추천드립니다!!

 

 

 

세션(session) 인증 방식, 이 글 하나로 끝내자!

안녕하세요!NewCodes입니다!   세션 기반 인증이 글 하나로 끝내겠습니다!!  사전 지식으로 아래 글을 통해인증과 인가가 무엇인지 알고 오시면 좋습니다!인증과 인가, 더 이상 헷갈리지 말자! 

newcodes.tistory.com