Một điều mà các câu trả lời khác còn thiếu là phải hiểu rằng Xác thực và Ủy quyền trong ngữ cảnh RFC 2616 CHỈ đề cập đến giao thức Xác thực HTTP của RFC 2617. Xác thực bằng các lược đồ bên ngoài RFC2617 không được hỗ trợ trong mã trạng thái HTTP và không được xem xét khi quyết định nên sử dụng 401 hay 403.
Ngắn gọn và Terse
Không được phép chỉ ra rằng máy khách không được xác thực RFC2617 và máy chủ đang bắt đầu quá trình xác thực. Cấm chỉ ra rằng máy khách là RFC2617 được xác thực và không có ủy quyền hoặc máy chủ không hỗ trợ RFC2617 cho tài nguyên được yêu cầu.
Có nghĩa là nếu bạn có quy trình đăng nhập của riêng mình và không bao giờ sử dụng Xác thực HTTP, 403 luôn là phản hồi thích hợp và không bao giờ nên sử dụng 401.
Chi tiết và chuyên sâu
Từ RFC2616
10.4.2 401 Không được phép
Yêu cầu yêu cầu xác thực người dùng. Phản hồi PHẢI bao gồm trường tiêu đề WWW-xác thực (phần 14.47) có chứa một thách thức áp dụng cho tài nguyên được yêu cầu. Máy khách CÓ THỂ lặp lại yêu cầu với trường tiêu đề Ủy quyền phù hợp (phần 14.8).
và
10.4.4 403 Cấm Máy chủ hiểu yêu cầu nhưng từ chối thực hiện. Ủy quyền sẽ không giúp đỡ và yêu cầu KHÔNG NÊN lặp lại.
Điều đầu tiên cần ghi nhớ là "Xác thực" và "Ủy quyền" trong ngữ cảnh của tài liệu này đề cập cụ thể đến các giao thức Xác thực HTTP từ RFC 2617. Chúng không đề cập đến bất kỳ giao thức xác thực cuộn nào mà bạn có thể đã tạo sử dụng các trang đăng nhập, v.v. Tôi sẽ sử dụng "đăng nhập" để chỉ xác thực và ủy quyền bằng các phương pháp khác ngoài RFC2617
Vì vậy, sự khác biệt thực sự không phải là vấn đề là gì hoặc thậm chí nếu có một giải pháp. Sự khác biệt là những gì máy chủ mong đợi khách hàng sẽ làm tiếp theo.
401 chỉ ra rằng tài nguyên không thể được cung cấp, nhưng máy chủ đang BẮT BUỘC rằng máy khách đăng nhập thông qua Xác thực HTTP và đã gửi các tiêu đề trả lời để bắt đầu quá trình. Có thể có những ủy quyền sẽ cho phép truy cập vào tài nguyên, có thể không có, nhưng hãy thử xem điều gì sẽ xảy ra.
403 chỉ ra rằng tài nguyên không thể được cung cấp và đối với người dùng hiện tại, không có cách nào để giải quyết vấn đề này thông qua RFC2617 và không cần phải cố gắng. Điều này có thể là do được biết rằng không có mức xác thực nào là đủ (ví dụ vì danh sách đen IP), nhưng có thể là do người dùng đã được xác thực và không có thẩm quyền. Mô hình RFC2617 là một người dùng, một thông tin đăng nhập, vì vậy trường hợp người dùng có thể có một bộ thông tin xác thực thứ hai có thể được ủy quyền có thể bị bỏ qua. Nó cũng không gợi ý hay ngụ ý rằng một số loại trang đăng nhập hoặc giao thức xác thực không phải RFC2617 khác có thể hoặc không thể giúp đỡ - điều đó nằm ngoài các tiêu chuẩn và định nghĩa RFC2616.
Chỉnh sửa: RFC2616 đã lỗi thời, xem RFC7231 và RFC7235 .