Какой HTTP статус-код указывает на ошибку авторизации?

Ответ

Ошибка авторизации обычно возвращает HTTP статус-код 401 Unauthorized. Это означает, что запрос не был выполнен из-за отсутствия или недействительности учетных данных (аутентификации).

Пример обработки в Python (Flask):

from flask import Flask, jsonify, abort

app = Flask(__name__)

@app.route('/protected')
def protected():
    # Имитация проверки авторизации
    # Если пользователь не аутентифицирован, возвращаем 401
    abort(401, description="Требуется аутентификация")

if __name__ == '__main__':
    app.run()

В контексте REST API также часто используется 403 Forbidden. Этот код означает, что клиент аутентифицирован, но не имеет достаточных прав для доступа к запрошенному ресурсу (авторизация).

Пример ответа в FastAPI:

from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/admin")
async def admin_panel():
    # Имитация проверки прав доступа
    # Если пользователь аутентифицирован, но не имеет роли администратора
    raise HTTPException(status_code=403, detail="Доступ запрещен: недостаточно прав")

Ключевое различие:

  • 401 Unauthorized: Пользователь не аутентифицирован (кто вы?).
  • 403 Forbidden: Пользователь аутентифицирован, но не авторизован для данного действия (у вас нет разрешения на это?).

Ответ 18+ 🔞

Да ты посмотри на эту дичь, блядь! Ошибка авторизации — это ж классика, ёпта! Сервер такой: «А ты кто, сука, такой?» И шлёт тебе статус 401 Unauthorized. То есть, грубо говоря, твои креды — хуйня полная, либо их вообще нет, как у младенца в бане.

Вот тебе пример на Flask, смотри:

from flask import Flask, jsonify, abort

app = Flask(__name__)

@app.route('/protected')
def protected():
    # Имитация проверки авторизации
    # Если пользователь не аутентифицирован, возвращаем 401
    abort(401, description="Требуется аутентификация")

if __name__ == '__main__':
    app.run()

А теперь, внимание, ебать мои старые костыли, есть ещё 403 Forbidden! Это когда ты вроде представился, но тебе говорят: «Пошёл нахуй, с такими рожами сюда не ходят». То есть ты есть в системе, но прав у тебя — ноль ебать.

Глянь, как в FastAPI:

from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/admin")
async def admin_panel():
    # Имитация проверки прав доступа
    # Если пользователь аутентифицирован, но не имеет роли администратора
    raise HTTPException(status_code=403, detail="Доступ запрещен: недостаточно прав")

И главное, запомни разницу, а то опять накосячишь:

  • 401 Unauthorized: «Э, ты кто, блядь? Иди представься сначала!»
  • 403 Forbidden: «А, это ты, Васян... Нет, Васян, тебе сюда низя. Иди отсюда, пока не выебали».