401 Unauthorized

認証情報がないか、無効です。

使いどころ

トークンがないか、期限切れです。名前とは異なり、「未認証」を意味します。

よくある原因と対処法

よくある原因は、Authorization ヘッダーがない、Bearer プレフィックスのないトークンのような不正な形式、期限切れのアクセストークン、別の環境やオーディエンス向けに発行されたトークン、あるいは時刻のずれによって JWT が期限切れやまだ有効でないように見える、などです。JWT をデコードして exp、nbf、aud、iss を確認してください。正しい 401 には、サーバーが期待する認証スキームを示す WWW-Authenticate が含まれます。

クライアントはトークンを 1 回だけ更新して再試行し、ループしないようにします。ヘッダーは途中で失われることがあります。ブラウザーと curl は別のホストへのリダイレクト時に Authorization を落とし、PHP-FPM や CGI を使う Apache は CGIPassAuth On が設定されていない限りこれを取り除きます。CORS プリフライトが 401 で失敗する場合は、サーバーが OPTIONS に認証を要求しています。プリフライトは認証情報を送らないので、通過させてください。ユーザーが特定されているものの権限がない場合は 403 を使います。

クライアントエラー (4xx)

4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。

レスポンスでの表示

HTTP/1.1 401 Unauthorized

返し方

Node.js / Expressres.status(401).end()
Python / Flaskreturn '', 401
nginxreturn 401;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く