인증과 인가
누구인지 확인하는 일과 무엇을 해도 되는지 정하는 일이 함께 놓인 자리입니다. 두 물음은 붙어 다닙니다. 그래도 서로 별개의 결정입니다. 무엇을 하는 일이냐는 물음의 답은 한 문장이 아니라 목록으로 열립니다.
상세
인증과 인가는 한 낱말이 아니라 두 물음이 붙어 다니는 구역의 이름입니다. IETF(Internet Engineering Task Force, 국제 인터넷 표준화 기구)가 낸 인터넷 보안 용어집 RFC 4949(Request for Comments, 의견 요청)는 둘을 각각 다른 표제어로 정의합니다. 인증은 내세운 주장이 맞는지 확인하는 일입니다. 인가는 자원을 만져도 된다고 내주는 승인입니다. 한쪽은 확인이고 다른 쪽은 허락입니다. 각각이 무엇으로 이루어지는지는 그 두 편이 받습니다.
두 일에는 순서가 있습니다. NIST(National Institute of Standards and Technology, 미국 국립표준기술연구소)의 SP 800-63(Special Publication, 특별 간행물) 개정 4판이 적는 디지털 신원 모델이 그 순서를 그대로 씁니다. 먼저 자격증명 서비스 제공자나 검증자 쪽에서 가입자에 관한 정보가 나옵니다. 신뢰 당사자는 그 정보를 자기 인가 판정에 선택적으로 씁니다. 인증의 결과가 인가 판정의 입력이 되는 것이지 판정 자체가 되는 것은 아닙니다. 왜 그런지는 아래 경계 절이 받습니다.
flowchart TD
A[속성값을 갖는다는 주장] --> B[인증 · 주장을 검증]
B --> C[가입자에 관한 정보]
C --> D[인가 · 접근을 허락]
확인은 한 번으로 끝나는 일이 아닙니다. HTTP(HyperText Transfer Protocol, 하이퍼텍스트 전송 규약)는 확장 가능한 챌린지-응답 인증 스킴 집합으로 접근 제어와 인증의 일반 프레임워크를 제공합니다. 그 왕복이 실제로 어떤 헤더로 오가는지는 인증 편이 적습니다. 요청마다 이 왕복을 되풀이하지 않으려고 무언가를 들고 다니게 됩니다. 표준화 기구 OASIS(Organization for the Advancement of Structured Information Standards, 구조화 정보 표준 발전 기구)가 이 자리의 배경을 적었습니다. SAML(Security Assertion Markup Language, 보안 단언 마크업 언어) 기술 개요입니다. 여러 시스템이 브라우저 쿠키로 사용자 인증 상태 정보를 유지해 왔습니다. 웹 사용자가 시스템에 접근할 때마다 재인증이 필요하지 않게 하려는 것입니다.
들고 다니는 것에는 이름이 붙습니다. RFC 6749 는 액세스 토큰을 보호된 자원에 접근하는 데 쓰이는 자격증명이라고 적습니다. 클라이언트에 발급된 인가를 나타내는 문자열입니다. 클라이언트에게는 대개 불투명합니다. 토큰은 특정 범위와 기간을 나타냅니다. 그 범위와 기간은 자원 소유자가 부여합니다. 자원 서버와 인가 서버가 그것을 강제합니다. 리프레시 토큰은 액세스 토큰을 얻는 데 쓰이는 자격증명입니다. 리프레시 토큰을 발급할지는 인가 서버의 재량에 달린 선택 사항입니다.
남에게 맡기는 자리도 이 구역 안에 있습니다. RFC 6749 는 전통적인 클라이언트-서버 인증 모델을 먼저 적습니다. 제3자 애플리케이션에 제한된 자원 접근을 주려면 자원 소유자가 자기 자격증명을 제3자와 공유해야 했습니다. 그러면 제3자 애플리케이션은 그 자격증명을 나중에 쓰려고 저장해야 합니다. 대개 평문 비밀번호입니다. 비밀번호에는 보안 약점이 내재해 있습니다. 그 모델에서는 서버 쪽이 비밀번호 인증을 지원해야 하는 처지가 됩니다. OAuth 2.0 은 인가 레이어를 도입해 이 문제들을 다룹니다. 클라이언트 역할을 자원 소유자 역할과 분리합니다.
한 문장 정의가 안 서는 이유가 여기서 드러납니다. 신원을 무엇으로 대느냐, 그 확인을 어떻게 이어 가느냐가 각각 다른 물음입니다. 권한을 어디에 어떤 모양으로 적어 두느냐, 다른 서비스에 맡길 때 무엇을 주고받느냐도 그렇습니다. 답이 하나의 정의가 아니라 이름의 목록으로 열립니다. 이 자리에서 마주치는 이름들은 맨 아래 절이 받습니다.
경계
인가 판정의 자리
인증에 성공했다는 사실이 그 사람이 무엇을 해도 되는지까지 정하는가. 아닙니다. NIST SP 800-63 개정 3판은 인증이 청구인의 인가나 접근 특권을 정하지 않는다고 적습니다. 그것은 별개의 결정이라고 못박습니다. 자기 지침의 범위 밖이라고도 적습니다. 같은 문서는 신뢰 당사자가 가입자의 인증된 신원과 속성을 다른 요소들과 함께 인가 판정에 쓸 수 있다고 덧붙입니다. 인증의 결과는 인가 판정의 입력이지 인가 판정 자체가 아닙니다. 이 판은 2025년 8월 1일부로 개정 4판에 대체됐다고 문서 스스로 밝힙니다.
신원 증명
처음에 누구인지를 세우는 일도 인증인가. 아닙니다. RFC 4949 는 신원 증명을 시스템 개체의 신원을 확립하는 데 쓰이는 정보를 심사·검증하는 과정으로 정의합니다. 함께 볼 항목으로 등록을 답니다. 인증은 신원을 세우는 그 일이 아닙니다. 어떤 시스템 개체나 시스템 자원이 특정 속성값을 갖는다는 주장을 검증하는 과정입니다. NIST 도 이 둘을 다른 문서에 나눠 둡니다. SP 800-63A 가 신원 증명과 신청자의 원격 또는 대면 등록에 관한 요구사항을 맡습니다. SP 800-63B 가 인증 절차에 관한 요구사항을 맡습니다.
권한 위임 규격
권한을 위임하는 규격을 로그인에 쓰면 그것이 인증인가. 아닙니다. OAuth 2.0 인가 프레임워크는 제3자 애플리케이션이 HTTP 서비스에 제한된 접근을 얻게 하는 규격입니다. 자원 소유자를 대신해 얻거나 자기 자신을 위해 얻는 두 갈래를 다룹니다. OpenID Foundation 의 OpenID Connect Core 1.0 은 자기를 OAuth 2.0 프로토콜 위에 얹은 단순한 신원 레이어라고 소개합니다. 최종 사용자를 인증되게 하려고 OAuth 2.0 에 더한 주된 확장이 ID 토큰이라는 자료구조라고 적습니다. ID 토큰은 인가 서버가 수행한 최종 사용자 인증에 관한 클레임을 담는 보안 토큰입니다. JWT(JSON Web Token, JSON 웹 토큰)로 표현됩니다. 인증을 세우려면 무엇이 더 얹혀야 한다는 것을 규격 자신이 적어 둔 셈입니다.
이견
이 구역을 어디까지 한 이름으로 묶느냐가 문서를 낸 조직마다 갈립니다. 어디서 자르느냐도 갈립니다.
NIST 는 자릅니다. SP 800-63 은 여러 권으로 이루어진 묶음이라고 스스로 적습니다. 본권이 디지털 신원 모델과 위험 평가 방법론과 보증 수준 선택 절차를 담습니다. SP 800-63A 가 신원 증명과 등록을 맡습니다. SP 800-63B 가 세 가지 인증 보증 수준 각각에서 쓸 수 있는 인증 절차와 인증기 선택을 맡습니다. SP 800-63C 가 연합 신원 아키텍처와 단언 사용에 관한 요구사항을 맡습니다. 접근 판정은 이 묶음 밖으로 나갑니다. 속성 기반 접근 제어를 다루는 SP 800-162 가 별개 간행물입니다. 그 문서는 속성 기반 접근 제어를 논리적 접근 제어 방법론으로 적습니다. 주체·객체·요청된 연산의 속성을 정책이나 규칙에 견주어 평가해 인가를 정합니다.
OASIS 는 묶습니다. SAML 2.0 기술 개요는 단언과 프로토콜이 정의하는 것을 적습니다. XML(eXtensible Markup Language, 확장 마크업 언어)로 부호화한 단언을 만드는 문법과 의미입니다. 그 단언은 인증 정보와 속성 정보와 인가 정보를 기술합니다. 그 정보를 시스템 사이로 나르는 프로토콜 메시지까지 같은 자리에 둡니다.
OpenID Foundation 은 순서를 뒤집어 얹습니다. 인가 프레임워크인 OAuth 2.0 위에 신원 레이어를 올려 인증을 세웁니다. 이 구성에서는 인증이 인가 규격의 확장으로 놓입니다.
같은 것을 무엇이라 부르는지도 갈립니다. RFC 4949 는 authorization 의 동의어로 permission 과 privilege 를 듭니다. 맥락마다 선호되는 용어가 따로 있다고 적고, 세 맥락에 각각 다른 용어를 쓸 것을 SHOULD 로 적습니다. 공개키 기반구조와 역할 기반 접근 제어와 컴퓨터 운영체제가 그 세 맥락입니다. 어느 분야가 어느 이름을 쓰는지는 인가 편이 적습니다. 어느 나눔과 어느 이름이 맞는지는 여기서 적지 않습니다.
관련 항목
이 구역을 이루는 핵심 개념
인증 · 인가 · 신원 증명 · 접근 제어 · 자격증명 · 클레임 · 단언 · 검증자
신원을 대는 수단
비밀번호 · 솔트 · 해시 함수 · 일회용 비밀번호 · 다중 인증 · 생체 인증 · 패스키 · WebAuthn · 공개키 인증서 · X.509 · 어테스테이션
인증 상태를 이어 가는 수단
세션 · 쿠키 · 브라우저 · 액세스 토큰 · 리프레시 토큰 · JWT · ID 토큰 · 스코프 · 재인증 · 통합 로그인
남에게 맡기는 규격
OAuth 2.0 · OpenID Connect · SAML · XML · 페더레이션 · 인가 서버 · 자원 서버 · 자원 소유자 · 신뢰 당사자 · 자격증명 서비스 제공자
권한을 적는 방식
접근 제어 목록 · 역할 기반 접근 제어 · 속성 기반 접근 제어 · 권한 · 특권 · 최소 권한
이 자리에서 마주치는 값·등급
HTTP · 챌린지-응답 · 인증 스킴 · WWW-Authenticate · HTTP 401 · HTTP 403 · 인증 보증 수준
이 자리에서 자주 터지는 취약점
권한 상승 · 재전송 공격 · 크로스 사이트 요청 위조 · 피싱 · 비밀번호 평문 저장
정의를 낸 표준화 기구
IETF · NIST · OASIS · OpenID Foundation
이 구역을 정의하는 표준·문서
RFC 4949 · RFC 6749 · SP 800-63
권한이 다른 이름으로 불리는 분야
다른 이름: authentication and authorization · 인증·인가 · authn authz · auth