🔐 들어가며
사용자 인증 정보를 안전하고 효율적으로 전달하는 것은 웹 애플리케이션 개발에서 매우 중요한 부분입니다. 인증 정보는 주로 URL, 헤더, 또는 바디에 포함되는데, 각각의 방식에는 장단점과 보안상의 고려사항이 있습니다.
🌐 URL에 담는 경우
특징
URL에 인증 정보를 포함하는 방식은 간단하고 직관적이지만, 보안에 취약합니다. 특히 GET 요청에서 자주 사용되며, 브라우저 히스토리나 서버 로그에 민감한 정보가 기록될 수 있습니다.
장점
- 간편함: URL 파라미터로 쉽게 데이터를 전달할 수 있습니다.
- 디버깅 용이: URL에 명시적으로 포함되므로 디버깅 과정에서 데이터 확인이 쉽습니다.
단점
- 보안 취약: URL은 브라우저 히스토리, 로그 파일, 북마크 등에 저장될 가능성이 있어 민감한 정보 노출 위험이 큽니다.
- 길이 제한: 일부 브라우저와 서버는 URL 길이에 제한이 있으므로 대량의 데이터를 포함하기 어렵습니다.
예시
GET /api/resource?token=eyJhbGciOiJIUzI1NiIsInR5cCI...
보안 권장 사항
- 민감한 정보를 URL에 포함하지 않는 것이 최선입니다.
- 만약 부득이하게 URL에 정보를 포함해야 한다면, 짧은 유효 기간의 토큰을 사용하고 HTTPS로 암호화된 요청을 보장해야 합니다.
📜 헤더에 담는 경우
특징
헤더에 인증 정보를 포함하는 방식은 가장 널리 사용되는 방식입니다. RESTful API와 같은 현대적 시스템에서 표준으로 자리 잡았습니다.
장점
- 보안성: URL에 비해 민감한 정보가 노출될 가능성이 낮습니다.
- 표준화: 대부분의 인증 프로토콜(예: OAuth, JWT)이 헤더 기반 방식을 채택하고 있습니다.
- 유연성: GET, POST 등 모든 HTTP 메서드와 호환됩니다.
단점
- 추가 설정 필요: 클라이언트와 서버에서 헤더를 명시적으로 처리해야 합니다.
예시
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI...

실무 활용
- Bearer 토큰: 토큰 기반 인증에서
Authorization 헤더를 활용하는 방식이 가장 일반적입니다.
- Custom 헤더: 특정 애플리케이션 요구 사항에 맞게 사용자 정의 헤더를 사용할 수도 있습니다. 예:
X-Auth-Token.
📝 바디에 담는 경우
특징
바디에 인증 정보를 포함하는 방식은 주로 POST, PUT 요청에서 사용됩니다. URL이나 헤더에 담기 어려운 대량의 데이터를 처리할 수 있습니다.
장점
- 보안성: HTTPS를 사용하면 바디 내용이 암호화되므로 안전합니다.
- 유연성: 구조화된 데이터를 JSON, XML 등으로 전달할 수 있습니다.
단점
- GET 요청 제한: GET 요청에서는 바디를 사용할 수 없습니다.
- 추가 작업 필요: 서버가 요청 바디를 파싱해야 하므로 약간의 성능 부담이 발생할 수 있습니다.
예시
POST /api/login HTTP/1.1
Content-Type: application/json
{
"username": "user1",
"password": "password123"
}
실무 활용
- 로그인 요청: 사용자 인증 정보를 서버로 전송할 때 일반적으로 사용됩니다.
- 대량 데이터 전송: 추가 메타데이터와 함께 인증 정보를 전달할 때 유용합니다.
🔍 실무에서의 선택 기준
-
민감한 정보 보호: URL을 제외하고 헤더 또는 바디를 활용하는것이 좋습니다.
-
RESTful API 설계: 헤더에 인증 정보를 포함하는 것이 표준적이고 권장됩니다.
-
요청 종류에 따른 선택:
- 로그인 요청: POST 요청의 바디에 사용자 정보 포함
- 인증 토큰 전달:
Authorization 헤더 활용
🛡️ 보안 강화 방안
1. HTTPS 사용
- 모든 요청은 HTTPS를 통해 암호화된 채널로 전달해야 합니다.
- HTTPS가 적용되지 않은 경우, 민감한 정보가 쉽게 노출될 수 있습니다.
2. 짧은 유효 기간의 토큰
- 토큰의 유효 기간을 짧게 설정하여 노출 위험을 줄입니다.
- Refresh Token을 활용해 필요 시 새로운 Access Token을 발급합니다.
3. 서명된 JWT 사용
- JWT를 사용할 때 비밀 키를 활용해 서명하여 변조를 방지합니다.
- 서명을 검증하지 않은 토큰은 신뢰해서는 안 됩니다.
4. 민감한 데이터 최소화
- 토큰에는 필요한 최소한의 정보만 포함해야 합니다.
- 사용자 비밀번호와 같은 민감한 정보를 직접적으로 포함하지 마세요.
📚 참고문헌
사용자 정보를 담는 위치
JWT란 무엇인가?
[HTTP]HTTP란? (Header와 Body)
[출처] [HTTP]HTTP란? (Header와 Body)|작성자 로그
2장: API 프로토콜
RESTful API 설계 가이드