Pertanyaan Mengapa SessionAuthentication dalam REST Framework Django Tidak Pernah Mengembalikan HTTP401


Melihat ke dokumen dan sumber dari REST Framework Django, saya melihatnya SessionAuthentication hanya pernah mengembalikan kode HTTP 403 sedangkan lainnya Authentication kelas akan mengembalikan 401. Apa alasannya?

Tentu saja ada banyak kasus di mana 401 masuk akal.

Masalah ini sangat bermasalah karena "Kelas otentikasi pertama yang ditetapkan pada tampilan digunakan saat menentukan jenis respons." dan SessionAuthentication secara default adalah yang pertama Authentication kelas.


4
2017-10-28 04:36


asal


Jawaban:


Kerangka REST Django mematuhi Spesifikasi HTTP, dan tidak mengembalikan respon 401 saat Authentication kelas tidak mengembalikan a WWW-Authenticate tajuk yang bisa digunakan.

Respons HTTP 401 harus selalu menyertakan a WWW-Authenticate header, yang menginstruksikan kepada klien bagaimana mengotentikasi. Tanggapan HTTP 403 tidak termasuk WWW-Authenticate tajuk.

- Dokumentasi REST Framework Django

Karena SessionAuthentication kelas tidak mendefinisikan WWW-Authenticate header yang bisa digunakan, Django REST Framework tidak dapat mengembalikan 401 tanggapan dan masih mengikuti spesifikasi. Anda bisa menyelesaikan ini dengan mengatur yang lain Authentication kelas yang mendukung tajuk ke bagian atas daftar Anda, seperti BasicAuthentication.


8
2017-10-28 12:19