본문 바로가기

Spring Boot/유저 관리 기능

Authorization 헤더, 토큰 기반 인증 : Authorization 헤더

- HTTP 요청에서 Authorization 헤더의 역할

- 인증 정보를 헤더로 전달하는 방식, 그 필요성

- Basic, Bearer, Digest 등 인증 방식 식별자

- RFC 6750에서 정의하는 Bearer 토큰 규격

- 세션 기반 인증, 헤더 기반 인증의 차이


Authorization 헤더

1. Authorization 헤더

HTTP 요청에서 인증 정보를 서버로 전달하기 위해 사용하는 표준 헤더

HTTP 요청의 헤더 부분에 포함됨

서버가 클라이언트의 신원을 확인하고 보호된 리소스 접근 권한을 부여하는 데 사용됨

 

 

2. 구조와 기본 형식

구성 요소 설명 예시
인증 방식 어떤 인증 방법을 사용하는지 식별함 Basic, Bearer, Digest
자격증명 또는 토큰 인증 데이터(암호화, 인코딩된 값 등) 대충 인코딩된 데이터

 

형태는

Authorization: <인증방식> <인증정보> 가 된다

 

Basic 인증

Authorization: Basic dXNlcjpwYXNz

 

단순하지만, 보안에 취약하다

반드시 HTTPS와 함께 사용해야한다

 

 

Bearer 토큰 인증

Authorization: Bearer dXNlcjpwYXNz

 

RFC6750에서 정의된 방식으로 보통 엑세스 토큰(JWT 등)을 전달함

https://datatracker.ietf.org/doc/html/rfc7650

"이 토큰을 가진 사람(bearer)은 접근 권한이 있다"라는 의미임

 

 

Digest 인증

Authorization: Digest username:"B1uffer", realm="b1uffer@gmail.com", ...

 

nonce와 해시 알고리즘을 이용해서 암호를 직접 전송하지 않고, 검증한다

현재는 거의 Bearer/JWT 방식으로 대체됐음

 

 

 

3. 세션 기반 인증과의 차이점

구분 세션 기반 인증 Authorization 헤더 기반 인증
인증 정보 저장 위치 서버(세션 저장소) 클라이언트(토큰 등)
전송 방식 쿠키(Cookie: SESSION=...) 헤더(Authorization: ...)
상태 관리 서버가 상태(state)를 유지함 서버는 무상태(stateless)로 동작 가능
확장성 서버 확장시 세션 동기화가 필요함 토큰만 검증하면 되니까 확장성이 높음

 

 

 

4. 다이어그램

Basic, Bearer, Digest 인증 다이어그램

 

클라이언트 요청에 따라 Basic, Bearer, Digest 인증에 대한 검증 방식이 다르다

 


* API 서버를 설계할 땐 일반적으로 Authorization: Bearer <Token 형태> 방식을 가장 많이 사용한다

* Basic은 테스트나 내부 시스템에선 간단하게 쓸 수 있으나, 운영 환경에서는 권장되지 않음

* Digest는 거의 사용되지 않고, 대신 HTTPS + Bearer 토큰이 표준이다

* API 문서(Swagger, Postman 등)에서도 기본적으로 Authorization 헤더 인증을 표준으로 따른다


정리

키워드 설명 예시
Authorization 헤더 인증 정보를 서버로 전달하는 표준 헤더 Authorization: Basic ...
Basic username:password를 Base64로 인코딩해서 전송함 Basic 대충 인코딩된 내용
Bearer RFC 6750 정의
주로 토큰 기반 인증에 사용함
Bearer 대충 암호화된 내용
Digest nonce와 해시로 인증함
최근엔 거의 사용되지 않음
Digest username="B1uffer", ...
차이점 세션은 쿠키 기반이고
Authorization은 헤더 기반임
확장성과 보안성 측면에서 차이가 존재함