request.bearer_token 도입 배경 및 기능
Rails는 API 및 MCP 요청에 흔히 사용되는 Bearer 토큰 추출을 위해 request 객체에 bearer_token 메서드를 추가했습니다. 이전에는 개발자가 Authorization: Bearer <token> 형식의 헤더에서 토큰을 직접 정규식 등으로 파싱해야 했습니다. 이는 반복적인 코드 작성과 엣지 케이스 처리의 어려움을 야기했습니다.
작동 방식
bearer_token 메서드는 내부적으로 authorization 헬퍼 메서드를 사용합니다.
-
authorization메서드는HTTP_AUTHORIZATION,X-HTTP_AUTHORIZATION,X_HTTP_AUTHORIZATION,REDIRECT_X_HTTP_AUTHORIZATION등 다양한 HTTP 헤더 위치를 순서대로 확인하여 호환성을 보장합니다. -
이후
authorization.to_s[/\ABearer (.+)\z/, 1]와 같은 정규식을 사용하여 “Bearer “ 문자열 뒤에 오는 실제 토큰 값을 안전하게 추출합니다.\A는 문자열의 시작,\z는 문자열의 끝을 의미하며,(.+)는 토큰 자체를 캡처 그룹으로 잡습니다.[..., 1]구문은 첫 번째 캡처 그룹(즉, 토큰)을 반환합니다.
엣지 케이스 처리
bearer_token 메서드는 다음과 같은 다양한 엣지 케이스를 자동으로 처리합니다.
-
Authorization헤더가 없는 경우:nil반환 -
Bearer타입이 아닌 다른 인증 방식 (예:Basic):nil반환 -
Authorization: Bearer와 같이 토큰 값이 없는 경우:nil반환 -
X-HTTP_AUTHORIZATION등 다른 헤더를 통한 토큰 전달: 정상 추출
활용 예시
API 컨트롤러에서 before_action을 통해 authenticate_with_token 메서드를 구현하여 request.bearer_token으로 토큰을 추출하고 사용자 인증에 활용할 수 있습니다. 이는 인증 로직을 간결하고 표준화된 방식으로 작성할 수 있도록 돕습니다.