인증과 인가

양치는 하셨나요·2024년 8월 13일

인증이라는 단어는 평상시에도 많이 들어봤을 법 하다. 하지만 인가라는 단어는 뭔가 들어봤으면서도 생소한? 되게 전문적인 느낌이 팍팍 드는 단어이다. 체감되는 느낌은 매우 비슷하면서도 뭔가 다른 느낌이 드는 두 단어가 CS에선 어떤 방식을 의미하는지 자세히 알아본다.


개념적 차이

우선 체감적으로 보안적 요소와 관련되어있다는 것은 알 수 있다. 그렇다면 두 단어의 기본 개념 먼저 짚고 넘어가야 확실히 이해가 가능할 것 같아 앞에서 먼저 이야기한다.

  • 인증
    • 시스템이 사용자나 기기의 신원을 확인하는 과정
  • 인가
    • 시스템이 인증된 사용자에게 허가된 자원이나 접근 권한을 부여하는 과정

우리가 앞선 글들에서 웹과 서버, 그 사이의 통신에 대해 이야기하고 쿠키, 세션, 토큰에 대해 조사하며 보안의 중요성을 짚었다. 이런 보안적 내용 중 가장 중요한 것이 누구에게 어떤 권한을 부여해야 하는 것이다. 이런 것들을 위해 사용자를 구분하고 확인하는 것이 인증, 이렇게 확인된 사용자에게 권한을 부여하는 것이 인가이다.


인증

개념

앞서 이야기 한 것과 같이 시스템이 사용자나 기기의 신원을 확인하는 과정이다.

신원 확인? 가장 먼저 떠오르는 것은 로그인이다. 이런 로그인도 인증의 과정에 포함된다.

→ 시스템이 접근하는 대상이 누구인지 확인하는 절차.

절차

가장 자주 사용하는 방법인 로그인을 예시로 설명해본다.

회원가입

  1. 아이디-비밀번호를 생성
  2. 비밀번호를 암호화하여 DB에 저장.

로그인

  1. 등록된 아이디와 비밀번호를 입력
  2. 암호화되어 DB에 저장된 사용자의 비밀번호가 서로 일치하는지 비교
    1. 일치하면 로그인
    2. 일치하지 않을 시, 로그인에 실패
  3. 로그인에 성공하면, Access Token을 클라이언트에 전송
  4. 최초 로그인 성공 후, 다음부터는 Access Token을 첨부하여 서버에 요청을 전송함으로써 매번 로그인하는 과정을 생략할 수 있음

유형

잘 설명해둔 표가 있기에 가져와봤다.

자세히 보면 모두 우리가 일상 영역에서 사용하는 것들이다.

다중 유형 인증

위의 절차에서 예로 든 것은 결국 ID와 PW를 이용한 인증으로 하나의 수단을 사용했다. 이때 다양한 수단을 사용하는 것이 다중 유형 인증이다.

구분

  • Multi Step Authentication(MSA)
    • 동일한 유형으로 연이어 인증
    • 비밀번호 인증 후 PIN 인증 등과 같은 방법
  • Multi Factor Authentication(MFA)
    • ATM에서 카드 혹은 통장을 넣은 후 비밀번호를 입력하는 것과 같은 방법.

→ 이런 방법들이 있는 것도 결국 여러 단계를 거쳐 인증함으로 강력한 보안 기능을 제공하기 위해 존재한다.


인가

개념

인증과 마찬가지로 위에 한 번 명시 했듯이 시스템이 인증된 사용자에게 허가된 자원이나 접근 권한을 부여하는 과정이란 뜻이다.

→ 접근 권한을 얻는 일을 의미한다.

절차

평상시 우리는 인증과 인가의 차이를 구분하기 어려울 수도 있다. 대부분의 인증 절차를 거친 후엔 이미 인가가 되어 있기 때문이다. 인증으로 사용자를 구분했으면 기존에 부여되어 있는 권한을 획득할 수 있기 때문에 인증과 인가의 사이를 느낄 새도 없었을 것이기 때문이다. 그렇기 때문에 위의 인증의 예시에 이어 인가의 절차도 나눠 본다.

  1. 인증 절차를 통해, Access Token을 생성한다. 이 토큰은 사용자의 정보를 담은 상태이다. (ex. 사용자 아이디 값)
  2. 사용자가 요청을 보낼때, Access Token을 첨부하여 보낸다.
  3. 서버는 해당 Access Token을 복호화하고, 정보를 얻는다. (Access Token에 담긴 정보)
  4. 얻은 정보를 사용하여, DB에서 사용자 권한을 확인한다.
  5. 사용자의 권한이 확인되면, 해당 요청을 처리하도록 한다.
    1. 권한이 없다면, 에러코드를 출력

접근 제어 모델

정보에 접근하고자 하는 대상이 해당 정보에 접근 할 수 있는 권한이 있는지 판단하는 것.

종류

  • 강제적 접근 제어 모델 (Mandatory Access Control, MAC)
    • 미리 정해진 내용에 따라 권한 부여 및 제어
    • 중앙 집권적 제어에 따라 보안성이 높다.
    • 권한 관리 기능이 단순하고 제한적이어서 주체별 제어가 어렵고 모든 주체와 객체에 허용 등급을 표시해야 하므로 초기 설정이 복잡하다.
  • 임의적 접근 제어 모델 (Discretionary Access Control, DAC)
    • 객체에 대한 접근을 주체의 신분을 기준으로 제한
    • 주체와 객체를 알고 있으면 어떤 권한이 있는지 바로 알 수 있다.
    • 주체의 수나 객체의 수가 많아지면 쓸데없이 사용되는 메모리 공간이 많아질 수 있다. 이에 따라 탐색이 오래 걸릴 수 있다.
  • 역할 기반 접근 제어 모델 (Role Based Access Control, RBAC)
    • 권한을 사용자 개인이 아닌 역할 그룹에 부여하고, 사용자에게 역할을 할당하여 접근 제어
    • 대부분의 상용 플랫폼이 지원하는 관리 체계로 MAC를 보완했다.
    • 권한 관리자는 다수의 사용자에 대해 일일이 접근 권한을 관리하지 않아도 되고 적절한 역할만 부여해주면 되기 때문에 권한 관리 부담이 줄어든다.
    • 다양한 권한 요소를 고려하다 보면 권한 조건이 늘어날 때마다 역할의 개수가 과도하게 늘어날 수 있는 단점이 있으므로 역할을 개수를 적절히 유지하는 것이 중요하다.
  • 속성 기반 접근 제어 모델 (Attribute Based Access Control, ABAC)
    • 객체와 주체의 속성에 대한 조건을 기술하여 접근 제어
    • 시스템의 다양한 요소를 반영할 수 있기 때문에 표현력과 유연성이 좋다.
    • 큰 규모의 시스템에서는 일일이 속성을 적용하기 어렵고 각 객체 접근마다 복잡한 속성 조건을 계산해야 하기 때문에 성능이 다소 느리다.

연계 내용

이전 쿠키 세션 토큰 글과 보안이라는 점에서 연관이 매우 깊다. 결국 이런 것들은 인증과 인가의 과정이 HTTP의 Stateless라는 특성때문에 매번 인증과 인가의 과정을 거친다는 것이 불편하여 생긴 것이기 때문이다.

이처럼 쿠키 세션 토큰 글과 이 글을 엮어서 보면 더 이해가 쉬울 듯 하다.

결론

인증은 대상을 확인하는 과정으로 유형별 다양한 인증 방법이 있다.

인가는 대상에게 권한을 부여하는 과정으로 접근 제어 모델에 따라 다양한 방법으로 제공된다.

profile
프로그래밍을 잘하고 싶어요..

0개의 댓글