サーバー応答 401 Unauthorized
HTTP ステータスコード 401 (Unauthorized)
HTTP ステータスコード 401 は、要求が適用されなかったことを示します。この理由は、対象リソースに対して有効な認証情報が欠如しているためです。このコードはウェブ開発において頻繁に発生し、特に API を扱う際に開発者に混乱を招くことがあります。以下では、401 ステータスが発生する具体的なケースと、それを修正するための方法をさまざまなプログラミング言語で紹介します。
401 ステータスの発生原因
- 認証情報の欠如
- 無効な認証情報
- トークンの有効期限切れ
- 不正な認証ヘッダーのフォーマット
実際の例
-
例 1: 保護されたリソースへのアクセスエラー
状況の説明: ユーザーが認証を必要とする API にアクセスしようとしますが、認証情報を提供しません。
期待される動作: サーバーは 401 ステータスを返します。
-
例 2: 無効な認証情報
状況の説明: ユーザーが無効なユーザー名とパスワードを使用してリクエストを送信します。
期待される動作: サーバーは 401 ステータスを返し、認証に失敗したことを示します。
-
例 3: 期限切れのトークンの使用
状況の説明: ユーザーが期限切れのトークンを使用してアクセスを試みます。
期待される動作: サーバーは 401 ステータスを返し、トークンの更新を促します。
さまざまなプログラミング言語での 401 エラーの修正方法
JavaScript (Node.js)
jsonwebtoken ライブラリを使用して認証を処理します。
const jwt = require('jsonwebtoken');
app.get('/protected', (req, res) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).send('Unauthorized');
}
jwt.verify(token, 'secret_key', (err, user) => {
if (err) {
return res.status(401).send('Unauthorized');
}
res.send('Access granted');
});
});
Python (Flask)
Flask ライブラリを使用して認証情報を確認します。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/protected')
def protected():
auth = request.authorization
if not auth or not (auth.username == 'user' and auth.password == 'pass'):
return jsonify({'message': 'Unauthorized'}), 401
return jsonify({'message': 'Access granted'})
PHP
ヘッダーを使用して認証を処理します。
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
exit;
} else {
if ($_SERVER['PHP_AUTH_USER'] !== 'user' || $_SERVER['PHP_AUTH_PW'] !== 'pass') {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
exit;
}
echo 'Access granted';
}
?>
401 ステータスコードの概要
本記事では、HTTP ステータスコード 401 (Unauthorized) の意味、その発生原因、具体例、およびさまざまなプログラミング言語でのエラー処理方法について詳しく説明しました。開発者はこのコードを理解し、適切に対処することで、アプリケーションのセキュリティを向上させることができます。
原因 | 説明 |
---|---|
認証情報の欠如 | ユーザーが認証情報を提供しない場合。 |
無効な認証情報 | 提供されたユーザー名またはパスワードが誤っている場合。 |
トークンの有効期限切れ | ユーザーが既に期限切れのトークンを使用している場合。 |
不正な認証ヘッダーのフォーマット | 認証ヘッダーが正しい形式に従っていない場合。 |
追加コード
コード | 説明 |
---|---|
401.1 | ログオン失敗 - ユーザー名またはパスワードが不正です。 |
401.2 | サーバー設定によるログオン失敗 - サーバーの認証設定に問題があります。 |
401.3 | ACLによる未認証 - NTFSファイルシステムのアクセス許可によりアクセスが拒否されました。 |
401.4 | ISAPIフィルターによる認証失敗 - ISAPIフィルターにより認証が拒否されました。 |
401.5 | ISAPI/CGIアプリケーションによる認証失敗 - ISAPIまたはCGIアプリケーションにより認証が拒否されました。 |
401.501 | アクセス拒否: 同時リクエスト数制限に達しました - 同一クライアントIPからの同時リクエストが多すぎます。 |
401.502 | アクセス拒否: 最大リクエスト数制限に達しました - 指定された時間内でクライアントIPの最大リクエスト数を超えました。 |
401.503 | アクセス拒否: IPアドレス拒否 - クライアントIPアドレスが拒否リストに登録されています。 |
401.504 | アクセス拒否: ホスト名拒否 - クライアントホスト名が拒否リストに登録されています。 |