Odpověď serveru 401 Unauthorized
HTTP Status Kód 401 (Unauthorized)
HTTP status kód 401 označuje, že požadavek nebyl zpracován, protože chybí platná autentizace pro cílový zdroj. Tento kód je běžně používán ve webovém vývoji a může vyvolávat nedorozumění u vývojářů, zejména při práci s API. V této článku se podíváme na praktické příklady vzniku tohoto statusu a také na způsoby jeho opravy v různých programovacích jazycích.
Příčiny vzniku statusu 401
- Absence autentizačních údajů
- Nesprávné přihlašovací údaje
- Expired access tokens
- Nesprávný formát autentizačních hlaviček
Praktické příklady
-
Příklad 1: Chyba při pokusu o přístup k chráněnému zdroji
Popis situace: Uživatel se pokouší získat přístup k API, které vyžaduje autentizaci, ale neposkytuje žádné přihlašovací údaje.
Očekávané chování: Server vrátí status 401.
-
Příklad 2: Nesprávné přihlašovací údaje
Popis situace: Uživatel odesílá požadavek s chybným uživatelským jménem a heslem.
Očekávané chování: Server vrátí status 401 s informací o neúspěšné autentizaci.
-
Příklad 3: Použití vypršeného tokenu
Popis situace: Uživatel se pokouší použít token, který vypršel.
Očekávané chování: Server vrátí status 401 s žádostí o obnovu tokenu.
Způsoby opravy chyby 401 v různých programovacích jazycích
JavaScript (Node.js)
Ošetření autentizace pomocí knihovny 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)
Použití knihovny Flask
pro kontrolu autentizačních údajů.
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
Ošetření autentizace pomocí hlaviček.
<?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';
}
?>
Tabulka příčin a řešení statusu 401
Příčina | Řešení |
---|---|
Absence autentizačních údajů | Ujistěte se, že jsou údaje poskytnuty v požadavku. |
Nesprávné přihlašovací údaje | Zkontrolujte správnost zadaných údajů. |
Vypršené tokeny | Obnovte token pomocí dostupných metod obnovení. |
Nesprávný formát hlaviček | Ověřte formát hlaviček podle specifikace API. |
V této článku jsme prozkoumali, co znamená status kód 401 (Unauthorized), jeho příčiny a příklady výskytu, stejně jako způsoby, jak tento problém řešit v různých programovacích jazycích.
Další kódy
Kód | Popis |
---|---|
401.1 | Přihlášení se nezdařilo - Přihlášení selhalo kvůli nesprávnému uživatelskému jménu nebo heslu. |
401.2 | Přihlášení selhalo kvůli konfiguraci serveru - Problém s autentizací na serveru. |
401.3 | Neoprávněný přístup kvůli ACL - Přístup byl odepřen kvůli oprávněním souborového systému NTFS. |
401.4 | Autorizace selhala kvůli filtru - Požadavek byl zablokován ISAPI filtrem. |
401.5 | Autorizace selhala kvůli ISAPI/CGI aplikaci - Požadavek byl zablokován ISAPI nebo CGI aplikací. |
401.501 | Přístup odepřen: dosažen limit souběžných požadavků - Příliš mnoho souběžných požadavků z jedné IP. |
401.502 | Přístup odepřen: dosažen maximální limit požadavků - IP překročila maximální počet požadavků za určité období. |
401.503 | Přístup odepřen: IP adresa odmítnuta - IP adresa klienta je na seznamu zakázaných adres. |
401.504 | Přístup odepřen: hostitelské jméno odmítnuto - Hostitelské jméno klienta je na seznamu zakázaných hostitelů. |