Щось інших відповідей бракує, це те, що слід розуміти, що аутентифікація та авторизація в контексті RFC 2616 посилається ТІЛЬКИ на протокол автентифікації HTTP RFC 2617. Аутентифікація за схемами поза RFC2617 не підтримується в кодах статусу HTTP і не враховується при вирішенні питання про використання 401 чи 403.
Короткі та термінові
Несанкціонований вказує на те, що клієнт не має аутентифікації RFC2617 і сервер ініціює процес аутентифікації. Заборонено вказує або на те, що клієнт має аутентифікацію RFC2617 і не має авторизації, або що сервер не підтримує RFC2617 для запитуваного ресурсу.
Це означає, що якщо у вас є власний власний процес входу, і ви ніколи не використовуєте HTTP-аутентифікацію, 403 - це завжди відповідна відповідь і 401 ніколи не слід використовувати.
Детально і поглиблено
З RFC2616
10.4.2 401 Несанкціоновано
У запиті потрібна автентифікація користувача. Відповідь ОБОВ'ЯЗКОВО включатиме поле заголовка WWW-Authenticate (розділ 14.47), що містить виклик, застосовний до запитуваного ресурсу. Клієнт МОЖЕ повторити запит у відповідному полі заголовка Авторизація (розділ 14.8).
і
10.4.4 403 Заборонено Сервер зрозумів запит, але відмовляється його виконувати. Авторизація не допоможе, і запит НЕ повинен повторюватися.
Перше, що потрібно пам’ятати, - це те, що «Автентифікація» та «Авторизація» в контексті цього документа конкретно посилаються на протоколи автентифікації HTTP від RFC 2617. Вони не посилаються на будь-які створені вами власні протоколи аутентифікації, які ви могли створити використовуючи сторінки входу і т.д. Я буду використовувати "login" для позначення автентифікації та авторизації іншими методами, ніж RFC2617
Тож реальна різниця полягає не в тому, в чому полягає проблема, або навіть якщо рішення є. Різниця полягає в тому, що сервер очікує, що клієнт буде робити далі.
401 вказує, що ресурс не може бути наданий, але сервер ЗАПИТВАЄ, щоб клієнт увійшов через HTTP-аутентифікацію та надіслав заголовки відповідей, щоб ініціювати процес. Можливо, є авторизація, яка дозволить отримати доступ до ресурсу, можливо, їх немає, але давайте спробуємо і подивимося, що відбувається.
403 вказує, що ресурс неможливо надати, і для поточного користувача немає способу вирішити це через RFC2617 і немає сенсу намагатися. Це може бути тому, що відомо, що рівень аутентифікації недостатній (наприклад, через чорний список IP-адрес), але це може бути тому, що користувач вже автентифікований і не має повноважень. Модель RFC2617 є однокористувачем, однодоступними, тому випадок, коли у користувача може бути другий набір облікових даних, який може бути дозволений, може ігноруватися. Це ні підказує, ні передбачає, що якась сторінка входу чи інший протокол аутентифікації, який не є RFC2617, можуть допомогти або не допомогти - це поза стандартами та визначенням RFC2616.
Редагувати: RFC2616 застаріло, див. RFC7231 та RFC7235 .