認証情報がないか、無効です。
使いどころ
トークンがないか、期限切れです。名前とは異なり、「未認証」を意味します。
よくある原因と対処法
よくある原因は、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 / Express | res.status(401).end() |
|---|---|
| Python / Flask | return '', 401 |
| nginx | return 401; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/