Authentication vs Authorization

스머리·2023년 11월 7일

유저와 관련된 기능들에는

인증: 리퀘스트를 보낸 사용자가 누구인지를 파악
인가: 리퀘스트마다 할 수 있는 걸 제한

이 둘을 묶어 '유저 기능' or '유저 시스템'이라고 부른다.


인증(Authentication)

신원을 확인하는 것

회원가입 플로우

이메일은 다른 유저와 중복되면 안 되고,
비밀번호는 유출되면 안 되기 때문에 주로 암호화해서 저장한다.

유저 모델을 생성한 뒤에는 사용자들이 회원 가입을 할 수 있다.
-> 서버에 유저 데이터를 저장해준다.

회원가입 버튼을 누르면
클라이언트는 서버에 회원 가입 URL로 유저를 만들어달라는 POST 리퀘스트를 보낸다.
입력한 정보는 리퀘스트 바디로 보낸다.
서버는 메일이 중복되는지, 비밀번호가 조건을 만족하는 지 등
인증 정보에 대한 기본적인 테스트를 하고 유저 데이터를 새롭게 저장한다.

리퀘스트로 받은 인증 정보 말고도
하나의 유저를 특정지을 수 있게 해주는 자연수 값, 아이디(id)가 저장된다.
새로운 유저를 저장할 때마다 자동으로 1씩 증가하도록 설정돼 있어, 두 유저가 같은 아이디를 가질 일은 없다.

테스트에 통과하지 못하면
에러 리스폰스를 클라이언트에 보내면 되고 (400)
통과해서 유저를 생성했으면 성공 리스폰스를 보내면 된다 (200)

로그인 플로우

유저가 사이트에서 본인만의 이메일과 비밀번호를 입력하고 버튼을 누르면
클라이언트는 로그인을 처리하는 서버 URL로 리퀘스트를 보낸다.
회원가입 떄처럼 인증 정보를 바디로 보낸다.
그럼 서버는 이메일로 어떤 유저가 인증을 원하는지 찾고,
비밀번호로 인증을 요청하는 사람이 그 계정의 주인인지를 확인한다.

받은 정보가 서버에 저장된 유저와 일치하는 게 없으면
서버는 에러 리스폰스를 보낸다. (400)
일치하면 성공 리스폰스(200)와 함께 문자열 형식의 인증서 같은 걸 같이 보낸다.

이 인증서는 로그인한 유저가 누군지 특정지을 수 있는 일종의 증명서
이걸 받은 클라이언트는 컴퓨터에 저장하고 이후에 리퀘스트를 보낼 때 붙여서 같이 보내준다.
서버는 이걸 통해서 특정 리퀘스트를 누가 보냈는지를 알아낸다.
이 원리를 이용해서 로그인을 한 번만 하면, 뒤에 보내는 리퀘스트들에서는 계속 유저를 인증할 수 있는 것이다.

이 인증서는 보통 만료 기간이 있다. 특정 시간이 지나면 무효화돼서 더 이상 사용할 수 없게 된다.
한마디로 로그아웃이 된다.
새로운 인증서를 발급받기 위해서는 다시 이메일과 비밀번호를 써서 로그인해야 한다.

클라이언트와 서버가 '어떤 종류'의 인증서를 '어떤 방식'으로 관리할 것인지와 같은
구체적 선택에 따라 인증의 이름과 분류가 조금씩 달라진다.


인가(Authorization)

리퀘스트가 어떤 권한이 있는지 판단

인증과 인가를 혼용해서 쓰는 경우가 있으나 둘은 서로 다른 기능이다.

  • 보낸 유저가 누구세요? 인증
  • 리퀘스트 내용을 요청할 권한이 있나요? 인가

서버가 게시물 삭제 리퀘스트를 받았을 때:

  1. 리퀘스트와 함께 온 인증서, 세션 ID나 토큰 같은 걸 통해 어떤 유저가 보냈는지를 파악
  2. 해당 유저가 게시글을 삭제할 수 있는 권한이 있는지 파악
    1. 페이지 관리자, 또는 작성자라면 요청대로 게시글 삭제함
    2. 권한 없으면 클라이언트에 실패 리스폰스를 돌려줌

여기에서 리퀘스트를 보낸 유저가 누구인지 파악하는 과정이 인증,
해당 유저가 게시글을 삭제할 권한이 있는 확인하는 과정이 인가.

일반적으로는 성공적인 인증이 일어나고 그 뒤에 인가가 뒤따른다.

profile
꾸준히 나아가는 프론트엔드 개발자

0개의 댓글