본문 바로가기
IT

HTTP 401 Unauthorized — 인증 필요·로그인 에러 원인·해결·예방

by 샤나엘 2026. 6. 23.
반응형

HTTP 401 Unauthorized — 인증 필요·로그인 에러 원인·해결·예방

API를 호출하거나 보호된 페이지에 들어갔는데 "401 Unauthorized"가 돌아온다면, 서버가 "당신이 누구인지 모르겠으니 먼저 인증하라"고 말하는 것이다. 이름은 "Unauthorized(권한 없음)"이지만 실제 의미는 "Unauthenticated(인증 안 됨)"에 가깝다. 이 역사적 작명 때문에 403과 자주 헷갈린다.

 

401은 4xx 클라이언트 오류이고, 핵심은 인증이다. 인증 정보를 안 보냈거나, 자격증명이 틀렸거나, 토큰이 만료됐을 때 나타난다. 이 글은 401의 의미, 자주 나오는 원인, 인증 헤더·토큰 코드, 단계별 진단·해결, 그리고 403과의 차이까지 정리한다.

 

HTTP 401 Unauthorized

이 글의 구성

 

🔎401 에러 메시지와 의미
🧩자주 나오는 발생 원인 5가지
💻재현 시나리오와 인증 코드
🛠해결 방법과 단계별 진단
⚖️401 vs 403 vs 400 비교
💬자주 묻는 질문 5가지

🔎 401 에러 메시지와 의미

401은 HTTP 응답 상태 코드 가운데 4xx, 클라이언트 측 오류로 분류된다. 요청에 유효한 인증 정보가 없어서 서버가 처리를 거부했다는 뜻이다. 표준상 401 응답은 인증 방식을 알려주는 WWW-Authenticate 헤더를 함께 보내야 한다.

항목 내용
상태 코드 401
영문 메시지 Unauthorized
실제 의미 인증되지 않음(Unauthenticated) — 인증 필요
분류 4xx 클라이언트 오류
함께 보내는 헤더 WWW-Authenticate (인증 방식 안내)

이름의 함정을 기억해 두자. "Unauthorized"라고 적혀 있지만 401의 진짜 뜻은 "인증이 안 됐다"이다. 권한 부족으로 거부하는 것은 403이다. 그래서 401은 "로그인부터 하라", 403은 "로그인은 했지만 그래도 안 된다"로 갈린다. 로그인이나 토큰으로 풀릴 여지가 있다면 401이다.

핵심 관찰 — 이름은 권한, 실제는 인증

401의 진단은 "내 인증 정보가 서버에 제대로 전달됐는가"로 시작한다. 토큰·세션·API 키가 없거나, 틀렸거나, 만료됐는지를 본다. 권한(역할) 문제처럼 보인다면 그건 401이 아니라 403일 가능성이 크다.


🧩 자주 나오는 발생 원인 5가지

원인 1 — 인증 정보 누락

가장 기본이다. 보호된 자원에 Authorization 헤더나 세션 쿠키 없이 요청하면 401이 난다. API에서 토큰을 빠뜨리고 호출하는 실수가 대표적이다.

원인 2 — 잘못된 자격증명

아이디·비밀번호가 틀렸거나, API 키가 잘못됐거나, 토큰 값이 손상된 경우다. 복사 과정에서 토큰 앞뒤 공백이나 일부 문자가 빠지는 일도 흔하다.

원인 3 — 만료된 토큰·세션

JWT 액세스 토큰, OAuth 토큰, 로그인 세션은 유효 기간이 있다. 만료된 뒤 같은 토큰으로 계속 요청하면 401이 난다. 한동안 잘 되다가 갑자기 401이 뜨면 만료를 먼저 의심한다.

원인 4 — 잘못된 인증 헤더 형식

토큰은 맞는데 헤더 형식이 틀린 경우다. Bearer 스킴을 빼먹거나(Authorization: 토큰만 보냄), 스킴 철자나 공백이 어긋나면 서버가 인증으로 인식하지 못해 401이 난다.

원인 5 — 로그아웃·세션 무효화

다른 기기에서 로그아웃했거나, 비밀번호 변경으로 세션이 무효화됐거나, 서버가 토큰을 강제 폐기하면 기존 인증이 더는 유효하지 않아 401이 난다. 보안 정책상 의도된 동작인 경우도 많다.


💻 재현 시나리오와 인증 코드

먼저 401 응답의 모습이다. WWW-Authenticate 헤더로 어떤 인증이 필요한지 알려준다.

# 응답
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api"

API에서 가장 흔한 재현은 토큰 없이 보호된 자원을 호출하는 것이다. 올바른 Bearer 토큰을 넣으면 통과한다.

# ✗ 인증 헤더 없이 요청 → 401
curl https://api.example.com/me

# ✓ Bearer 토큰 포함 → 정상
curl https://api.example.com/me \
  -H "Authorization: Bearer eyJhbGciOi..."

헤더 형식이 틀리거나 토큰이 만료되면, 토큰을 보냈더라도 401이 난다.

# ✗ Bearer 스킴 누락 (토큰만 보냄) → 401
curl https://api.example.com/me \
  -H "Authorization: eyJhbGciOi..."

# 만료 토큰이면 → 401, refresh 토큰으로 재발급 후 재요청

🛠 해결 방법과 단계별 진단

401은 "인증이 제대로 전달·유효한가"를 좁힌다. 사용자라면 재로그인을, 개발자라면 헤더·토큰을 본다.

입장 해결 방법
방문자 다시 로그인, 비밀번호 확인, 세션 만료 시 재인증
인증 누락 Authorization 헤더·세션 쿠키 포함 여부 확인
토큰 만료 refresh 토큰으로 재발급 후 재요청, 만료 시간 점검
헤더 형식 Bearer 스킴·공백·철자 점검, WWW-Authenticate 확인
자격증명 API 키·아이디·비밀번호 정확성, 서버 인증 로그 확인

단계별 진단 절차

01인증 정보를 아예 안 보냈는지부터 본다. 보호된 자원이면 토큰·세션이 반드시 필요하다.
02로그인하면 풀리는지 확인한다. 풀리면 401(인증), 로그인해도 막히면 403(권한)이다.
03한동안 되다 갑자기 401이면 토큰·세션 만료를 의심하고 재발급·재로그인한다.
04Authorization 헤더 형식(Bearer + 공백 + 토큰)과 토큰 값이 정확한지 본다.
05서버 인증 미들웨어 로그에서 거부 사유(만료·서명 오류·키 불일치)를 확인한다.

⚖️ 401 vs 403 vs 400 비교

세 코드는 "거부"라는 점만 같고 이유가 다르다. 무엇이 문제인지로 구분한다.

코드 의미 한 줄 구분
401 인증 필요·실패 누구인지 인증 안 됨(로그인하라)
403 접근 금지 인증돼도 권한 없음
400 잘못된 요청 요청 형식 자체가 깨짐

한 문장으로 정리하면, 401은 "신분증을 보여달라", 403은 "신분은 확인했지만 출입 금지", 400은 "요청서 양식이 잘못됐다"이다. 그래서 401은 로그인·토큰으로, 403은 권한·설정으로, 400은 요청 형식으로 푼다. 실무에서 401과 403을 바꿔 쓰는 서비스도 있지만, 표준 의미는 이렇게 구분된다.

401은 "권한 없음"이라 적혀 있지만 사실은 "아직 인증이 안 됐다"는 말이다. 이름에 속지 말고 인증부터 점검하라.

 

— 401은 인증, 403은 권한


💬 자주 묻는 질문 5가지

Q1401이면 비밀번호가 틀린 건가요?

꼭 그렇지는 않습니다. 비밀번호 오류도 401이지만, 아예 인증 정보를 안 보냈거나 토큰이 만료된 경우도 401입니다. "인증이 유효하지 않다"는 넓은 의미라, 자격증명 오류와 인증 누락·만료를 함께 의심해야 합니다.

Q2잘 쓰던 API가 갑자기 401이 떠요.

토큰 만료가 가장 흔한 원인입니다. 액세스 토큰은 유효 기간이 있어 시간이 지나면 만료됩니다. refresh 토큰으로 새 토큰을 발급받아 재요청하도록 처리하면 됩니다. 비밀번호 변경·로그아웃으로 세션이 무효화됐을 수도 있습니다.

Q3토큰을 분명히 보냈는데 401이 나요.

헤더 형식을 의심하세요. 대개 "Authorization: Bearer 토큰" 형태여야 하는데, Bearer 스킴을 빼먹거나 공백·철자가 어긋나면 서버가 인증으로 인식하지 못합니다. 토큰 복사 시 앞뒤 공백이나 줄바꿈이 섞이지 않았는지도 확인합니다.

Q4401과 403은 정확히 뭐가 다른가요?

401은 "인증이 안 됐다(누구인지 모름)", 403은 "인증은 됐지만 권한이 없다"입니다. 401은 로그인·토큰으로 풀릴 수 있고, 403은 로그인해도 권한이 없으면 그대로 막힙니다. 로그인 후에도 막히면 403으로 보면 됩니다.

Q5웹 페이지에서 401을 만나면요?

로그인 세션이 없거나 만료된 경우가 많습니다. 다시 로그인하면 대부분 해결됩니다. 잘 만든 서비스는 401을 받으면 자동으로 로그인 페이지로 보내 주기도 합니다. 계속 401이면 쿠키 차단·시간 설정 오류도 점검해 보세요.


📌 결론

401 Unauthorized는 "당신이 누구인지 인증이 안 됐다"는 신호다. 이름은 권한을 말하지만 본질은 인증이고, 403(권한 없음)과 구분하는 것이 첫걸음이다. 그래서 시선은 늘 "인증 정보가 제대로, 유효하게 전달됐는가"를 향한다.

실무 원칙은 다음과 같다.

 

🔑 인증 정보가 전달됐고 유효한지부터 본다. 토큰·세션·API 키의 존재와 만료를 먼저 확인한다.

🔁 토큰 만료는 refresh로 자동 갱신한다. 한동안 되다 갑자기 401이면 거의 만료다.

⚖️ 401과 403을 구분한다. 로그인으로 풀리면 401, 로그인해도 막히면 403이다.

401 트러블슈팅 체크리스트

 

01보호된 자원에 인증 정보(토큰·세션)를 보냈는지 확인.
02로그인하면 풀리는지로 401(인증)·403(권한) 구분.
03한동안 되다 갑자기 401이면 토큰·세션 만료 의심 후 재발급.
04Authorization 헤더 형식(Bearer + 공백 + 토큰)·토큰 값 점검.
05API 키·아이디·비밀번호 정확성, 토큰 서명·만료 확인.
06서버 인증 로그에서 거부 사유(만료·서명·키 불일치) 확인.
07예방: 토큰 자동 갱신·만료 전 재인증, 401 시 로그인 유도.

본 글은 HTTP 401 Unauthorized 에러의 일반적 원인과 해결 방법을 정리한 자료다. 인증·토큰 설정 변경은 운영 환경에 적용하기 전 테스트 환경에서 충분히 검증한다.

 

#401에러 #Unauthorized #HTTP401 #HTTP에러 #HTTP상태코드 #인증필요 #로그인실패 #토큰만료 #JWT #Bearer #WWWAuthenticate #401과403차이 #API에러 #웹개발 #트러블슈팅

반응형

댓글