401 Unauthorized 오류 해결 (인증 실패)
GET /api/... 401 (Unauthorized)
증상
요청이 다음 상태 코드로 거부됩니다.
GET https://api.example.com/me 401 (Unauthorized)
원인
인증 정보가 없거나 유효하지 않다는 뜻입니다(누구인지 확인 불가). 권한 부족(인가)인 403 Forbidden과는 다릅니다. 흔한 원인:
- Authorization 헤더를 안 보냄
- 토큰 만료
- 헤더 형식 오류 (
Bearer접두사 누락) - 쿠키 기반인데
credentials를 안 보냄
해결
1) 토큰을 올바른 형식으로 전송
const res = await fetch('/api/me', {
headers: { Authorization: `Bearer ${token}` }, // 'Bearer ' 공백 포함
});
2) 토큰 만료 확인
저장된 토큰이 만료됐을 수 있습니다. JWT라면 JWT 디코더로 exp를 확인하세요. 만료 시 재발급(refresh) 후 재시도합니다.
3) 쿠키 기반 인증
fetch('/api/me', { credentials: 'include' }); // 쿠키 동봉
서버는 Access-Control-Allow-Credentials: true가 필요합니다(CORS 참고).
4) 실제로 보내지는지 확인
브라우저 Network 탭 → 해당 요청 → Request Headers에서 Authorization이 실제로 붙어 나가는지 확인합니다.
401은 "로그인 정보 문제", 403은 "로그인은 됐지만 권한 없음"입니다. 둘을 구분하면 원인을 빨리 좁힐 수 있습니다.