HTTP 401 Unauthorized

認証が必要: サーバーはあなたが誰であるかを把握していないか、認証情報が有効ではありません。

HTTP 401 の意味

HTTP 401 Unauthorized は、有効な認証情報を欠いているためリクエストが拒否されたことを意味します。その名前にもかかわらず、これは認証(あなたが誰であるか)に関するものであり、認可(あなたが何をしてよいか)に関するものではありません — 後者のケースは 403 Forbidden です。

仕様に準拠した 401 には、認証方法を示す WWW-Authenticate ヘッダーが含まれます。例えばトークン API では Bearer、従来型の HTTP 認証では Basic です。

401 エラーのよくある原因

  • 認証情報が一切送信されませんでした(Authorization ヘッダーやセッションクッキーの欠落)。
  • 期限切れ、失効、または不正な形式のトークンです — API で最もよくある原因です。
  • 誤った認証方式(Bearer トークンが期待されている場所に API キーを送信するなど)です。
  • ログアウト済みのセッションです: タブが開いたままの間にクッキーが期限切れになった、またはクリアされました。
  • 時刻のずれにより、短命な JWT が到着時にすでに期限切れに見えてしまっています。

ユーザーとしての対処法

  • 再度ログインしてください — セッションが期限切れになった可能性が最も高いです。
  • それでもループする場合は、そのサイトのクッキーをクリアして改めてサインインしてください。
  • その URL が、自分が持っていないアカウントを必要とする管理画面やステージング環境ではないか確認してください。

開発者としての対処法

  • 期限切れのトークンを更新または再発行してください。API クライアントには自動トークン更新を実装してください。
  • Authorization ヘッダーを期待される形式どおりに正確に送信してください(「Bearer <token>」— 単語とスペースの両方が重要です)。
  • 401 は認証情報の欠落・無効の場合にのみ返し、有効なユーザーが権限を欠く場合は 403 を返してください。クライアントが正しく対応できるようにするためです。
  • JWT の「exp」の検証が予期せず失敗する場合は、サーバーの時刻同期(NTP)を確認してください。

レスポンス例

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token", error_description="expired"

よくある質問

401 と 403 の違いは何ですか?

401 は、サーバーがあなたの有効な認証情報を持っていないことを意味します — ログインするかトークンを更新してください。403 は、あなたが誰であるかを把握したうえで、それでも拒否していることを意味します。

有効なトークンなのに 401 になるのはなぜですか?

よくある原因: 期限切れのトークン、誤ったヘッダー形式、別の環境や対象向けに発行されたトークン、サーバーの時刻のずれです。

ログイン失敗は 401 を返すべきですか?

API の場合、説明用のボディを付けて返すことが多いです。Web のログインフォームでは、通常はページ上にエラーメッセージを表示する形で 200 を返します。