401は「あなた、誰ですか?」というサインです
ターミナルやログに 401 という数字が出てくると、初めて見たときはちょっと身構えると思います。でもこれ、実は仕組みとしてはかなりシンプルです。401は、インターネット上のやりとり(HTTP)で使われるステータスコードのひとつで、「認証されていない」ことを表します。
ステータスコードというのは、サーバーが「リクエストがどうなったか」を3桁の数字で返す仕組みです。よく見かける 200 は成功、404 は「そんなページはありません」。その仲間として、401は「あなたが誰なのか確認できないので、この先には進ませられません」という返事にあたります。
マンションのオートロックで例えると
オートロックのマンションを想像してください。エントランスで暗証番号を入れないと自動ドアは開きません。ここで起きうる状況は主に2つあります。
401にあたる状況
暗証番号を入れていない、または番号が間違っている。そもそも「住人かどうか」が確認できていないので、ドアが開かない。
403にあたる状況
住人であることは確認できた。でも、その人は屋上の機械室には入れない決まりになっている。身元はわかっているが、権限がない。
401と403(Forbidden)はよく混同されますが、この違いを押さえておくと原因の切り分けがぐっと楽になります。401は身元の確認そのものが済んでいない状態、403は身元はわかっているが許可されていない状態です。
どんなときに401が出るのか
APIやサービスを使っているときに401が出る典型的なケースは、だいたい次のようなものです。
- ログインしていない、あるいはログインセッションが切れた
- APIキーやトークンをリクエストに付け忘れた
- キーやトークンの文字列が間違っている(コピペのときに前後の空白や改行が混ざった、など)
- トークンの有効期限が切れた
個人的によくやらかすのが3つ目です。環境変数にキーを設定したつもりが、末尾に余計な改行が入っていて401、というパターン。エラーメッセージだけ見ると「キーが違う」としか出ないので、「いや設定したはずなんだけどな」と首をひねることになります。
401が出たときにまず確認すること
順番に見ていくと、たいてい原因は絞れます。
- 認証情報を渡しているか。そもそもAPIキーやトークンをリクエストに含めているかを確認します。
- 値が正しいか。コピペミス、空白や改行の混入、古いキーを使い回していないか。
- 期限が切れていないか。トークンには有効期限があるものが多く、時間が経つと再取得が必要です。
- 渡し方が合っているか。ヘッダーに入れるべきものをクエリに入れている、といった形式の違いでも認証は通りません。
ここまで見て身元の確認は通っているのに操作が拒否される場合は、401ではなく403が返っているはずです。返ってきた数字をきちんと読むことが、そのまま切り分けの第一歩になります。
「Unauthorized」という名前のややこしさ
401の正式名称は Unauthorized です。日本語にすると「認可されていない」と読めてしまうのですが、実際の意味は「認証されていない(Unauthenticated)」に近い。歴史的な経緯で名前と意味がややズレているので、名前ではなく「401=認証の問題」「403=権限の問題」と覚えてしまうのが実用的です。
エラーコードは責められているように感じるものですが、401に関しては「鍵を持ってきてください」と言われているだけです。落ち着いて認証情報まわりを見直せば、たいていの場合はすぐに解決します。
このページは役に立ちましたか?