인증과 인가란?

niireymik·2024년 3월 2일


📝 들어가며

이전에 <OAuth란?>에서 다루었던 인증(authn)과 인가(권한 부여, authz)는 서로 관련되어 있지만 별개의 개념이다. 이 둘은 모두 ID 및 액세스 관리(IAM)의 중요한 부분이다.

IAM이란 Identity and Access Management의 약자로, 사용자가 누구인지와 사용자가 어떤 권한을 갖고 있는지 알려주는 방법이다. IAM은 '출입 가능자', 'VIP 지역 출입 가능자'의 명단을 갖고 호텔의 문을 지키는 경비원과 유사하다.

위 맥락에서 간단히 보자면, 사용자가 누구인지 확인하고 '출입 가능자'임을 증명하는 것이 인증, 해당 사용자의 '출입 가능 구역'을 정하는 것이 인가에 해당한다.

이러한 인증과 인가의 개념과 절차를 아래에서 자세히 정리하고, 둘의 차이를 짚어보도록 하자! :>



🪪 인증(Authentication) : Who you are

인증이란

인증은 보안 프로세스의 첫 단계로서, 누군가 또는 무언가의 신원을 확인하는 절차이다. 컴퓨터 시스템은 확인 대상이 실제로 자신이 주장하는 사람인지를 확인해야 한다. 이때 컴퓨터는 사람이 하는 방식으로 사람이나 다른 컴퓨터를 "인식"할 수 없으므로, 인증 프로세스는 컴퓨터가 측정할 수 있는 객관적인 기준이나 디지털 인증서에 의존한다.

인증 방법1. 인증 요소(ID)를 통한 신원 확인

컴퓨팅의 맥락에서 "ID"는 편리하게 측정하고 디지털로 기록할 수 있는 특정 속성을 의미한다. 신분증이나 여권을 생각해 보면 한 사람의 모든 정보가 담기지는 않지만, 기록된 내용이 신분증[여권]의 내용과 일치하는지를 신속하게 확인해 개인의 신원의 확인할 수 있도록 개인적인 특성이 충분히 담겨 있다.

컴퓨터의 시스템은 ID를 확인하기 위해 사용자의 특징을 평가하고, 특징이 일치하면 사용자의 ID가 확인된다. 이러한 특징은 "인증 요소"로도 알려져 있다. 대표적으로 사용되는 3가지 인증 요소는 다음과 같다.

인증 요소 3가지

  • 당신이 아는 것(사용자가 아는 것)
    : 사용자 이름&비밀번호 조합이나 PIN 코드처럼, 한 사람의 사용자만 알 수 있는 지식
  • 당신이 가진 외재적인 것(사용자가 갖고 있는 것)
    : 인증 사용자에게 발행된 토큰
    - 소프트 토큰 : 스마트폰(이 스마트폰을 소유한 유일한 사람이기에 일회용 코드를 문자로 받아 인증)
    - 하드 토큰 : 블루투스, USB 토큰(장치에 연결해 신원 확인)
  • 당신이 가진 내재적인 것(사용자인 것)
    : 사용자의 신체적 속성 : 얼굴, 지문 등

인증 방법2. 디지털 인증서를 통한 신원 확인

인증 요소를 사용하는 것 외에도, 신뢰할 수 있는 누군가 [무언가]에게 디지털 인증서를 발급할 수도 있다. 디지털 인증서는 신원 확인을 위한 정보가 포함된 작은 디지털 파일이다.

디지털 인증서는 여권, 신분증, 지폐에 위조가 아님을 증명하는 워터마크가 있는 것과 같이 인증서를 발급하는 기관으로부터 진위를 증명하는 디지털 서명을 받는다. 이 과정에서 공개키와 개인키가 사용되고, 이로써 인증서가 있는 엔터티는 인증되었음을 증명할 수 있다.

(공개키와 개인키를 사용하는 암호화 방식은 다음 블로그에서 다루겠다.)

(+) 현재 디지털 인증서는 개인의 신원을 확인하는 데 자주 사용되지 않는다. 그러나 대부분은 자신도 모르게 매일 디지털 인증서에 의존한다. 누군가 HTTPS를 사용하는 웹 사이트를 로드할 때마다 웹 사이트의 디지털 인증서(SSL/TLS)를 사용하여 웹 사이트를 인증한다.



🙆‍♀️ 인가(Authorization) : What you can do

인가[권한 부여]란

은행 고객이 온라인으로 자신의 계정에 로그인하는 경우를 생각해 보자. 신원이 인증되었기 때문에 자신의 계정 잔액과 거래 내역을 볼 수 있지만, 다른 사람의 계정을 볼 권한은 없다. 반대로 은행의 관리자에게는 고객의 금융 데이터를 모두 볼 수 있는 권한이 부여된다.

이와 유사하게, 어떤 회사의 직원이 신원 확인 과정을 거쳤다고 해서 회사의 모든 파일이나 데이터에 접근할 수 있어야 하는 것은 아니다. 예를 들어 (회계와 관련 없는) 인사 부서의 직원이 모든 직원의 급여 내용을 볼 수는 없어야 한다.

이처럼 수행할 수 있는 권한은 사용자의 권한 부여 수준에 따라 결정된다. 이렇게 작업을 허가해 주고 권한을 주는 것이 바로 권한 부여, '인가'이다.

Access token

  • Resource owner가 자원에 대한 접근 권한을 인가하였음을 나타내는 자격 증명(만료 기간 있음)
  • 서버의 리소스 접근 권한에 초점
  • 호텔의 카드키와 같다.
    (카드키의 소유자가 어떤 객실에 출입할 권한이 있는지 확인 가능하지만 소유자에 대한 신원 정보 파악은 불가능)

사용자는 Access token으로서 권한을 부여받는다. 사용자가 자신의 Access token을 서버에게 보내면서 "나 여기 접근하고 싶어" 하면, 서버는 해당 액세스 토큰을 복호화해서 정보를 얻는다. 얻은 정보를 통해 사용자가 접근 가능한 리소스라고 판단할 경우만 해당 요청을 처리하도록 한다. 이것이 인가의 절차이다.



🪪인증과 인가🙆‍♂️

인증 → 인가

상황 예시
내가 우리 회사 건물의 101A 사무실로 들어가기 위해서는 카드키가 필요하다. 해당 카드키에는 내 사진과 이름 등의 정보가 포함되어 있다. 보안 시스템은 해당 카드키를 통해 나의 신원을 확인함과 동시에 내가 사무실에 들어갈 수 있는 사람임을 확인하고 들여보내준다.

이처럼, 일반적으로 인증과 인가의 과정은 특정 상황에서 그 경계가 모호할 수 있다. 그러나 여기서 알 수 있는 것은, 인증 → 인가로 이어질 수 있지만 인가 → 인증으로 이어질 수는 없다는 점이다. 예시를 다시 보자.

카드키에는 내 정보가 포함되어 있으므로 사내 정보망에 등록된 내 정보를 토대로 내가 101A 사무실에 들어갈 수 있다고 알 수 있을 것이다. 반대로, 내가 101A 사무실에 들어갈 수 있는 권한이 있다고 해서 항상 나임을 특정할 수는 없다. 정리하면,

  • 인증은 권한 부여 결정의 요소로 사용될 수 있다.
  • 권한 부여는 인증을 하기에는 유용하지 않을 수 있다.

☑️ '인증 → 인가'의 흐름이 일반적임을 알아두자!



📝 마치며

OAuth에서 다루었던 개념인 인증, 인가에 관해 알아보았다. 인증은 누군가의 신원을 확인하는 절차이고, 인가는 작업할 수 있도록 허가해 주고 권한을 부여해 주는 것이다. 그리고 '인증 → 인가'의 흐름이 자연스러움을 알 수 있었다.

0개의 댓글