何が起きたのか?
401 は「あなたが誰なのかが分からないので、この先には入れません」というサインです。 教室で言えば、職員室の入口で「身分証を見せてください」と言われたのに、何も提示せずに入ろうとした——そんな場面です。
認証情報そのものが付いていなかったり、トークンが期限切れだったり、ヘッダの綴りが違っていたり。サーバーはあなたを拒否しているのではなく、「まだ誰だか確認できていない」状態です。403(権限がない)とは原因の階層がひとつ違います。
黒板からのひとこと
職員室や保健室には「先生用」の表示があり、生徒も先生も入る前に身分を示します。誰もが入れる場所と、確認が必要な場所がある——これは安全のための仕組みで、特定の誰かを締め出すためではありません。
401 が返ってくるとき、サーバーは「もう一度、身分を提示してくれる?」と尋ねています。多くの場合は再ログインや、トークンの更新で解決します。怒られているのではなく、確認を求められているだけです。
解決への歩み
大丈夫、次はこうしてみよう:
- ログイン状態を確認:セッションが切れていないか、別タブでログアウトしていないか
- トークンの期限を確認:JWT なら exp を見て、期限切れならリフレッシュ
- Authorization ヘッダの中身を見る:
Bearer xxxの綴り、トークンが切れて欠けていないか - 認証サーバーの状態を確認(管理者向け):IdP のヘルス、署名鍵のローテーション、時刻同期 (NTP) のずれを順に
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 401 Unauthorized
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>401 Unauthorized</h1></body></html>