Oauthlib: Status HTTP tidak valid pada respons kesalahan

Dibuat pada 15 Sep 2014  ·  11Komentar  ·  Sumber: oauthlib/oauthlib

RFC 6749 Bagian 5.2 (http://tools.ietf.org/html/rfc6749#section-5.2) menjelaskan respons kesalahan. Dikatakan bahwa server harus merespons dengan HTTP 400 (Permintaan buruk). Tetapi oauthlib menggunakan HTTP 401 (Tidak Sah) sebagai gantinya untuk kesalahan seperti InvalidClientError , InvalidGrantError , UnauthorizedClientError dan kesalahan terkait lainnya.

Misalnya https://github.com/idan/oauthlib/blob/master/oauthlib/oauth2/rfc6749/errors.py#L181

Contributor Friendly

Komentar yang paling membantu

Sebelum membuat kemajuan dalam hal ini, saya ingin meringkas diskusi yang terjadi di masa lalu.

  1. invalid_client , di mana itu HARUS 401 jika otentikasi HTTP digunakan, selain itu MUNGKIN 401 .
  2. invalid_token , di mana itu HARUS 401 .

Bagaimanapun, jika 401 digunakan, WWW-Authenticate HARUS disetel ( RFC2616 ).

Implementasi OAuth2.0 lainnya

Ikhtisar singkat tentang implementasi OAuth2.0 yang paling umum mirip dengan konsensus keseluruhan:

Kesimpulan

Kami harus menyelaraskan dengan RFC, namun untuk tidak merusak implementasi apa pun, kami tidak boleh menyertakan perubahan ini dalam versi 2.xx, tetapi tunggu hingga 3.xx

Silakan, jangan ragu untuk ikut campur.

Semua 11 komentar

Spesifikasi menyebutkan bahwa 401 dapat digunakan dengan kesalahan klien yang tidak valid dan harus digunakan ketika otentikasi dilakukan melalui bidang header otorisasi. Meskipun oauthlib saat ini tidak melakukan apa pun untuk menyarankan bahwa bidang tajuk 'WWW-Otentikasi' harus disertakan dalam respons sesuai kebutuhan spesifikasi. Saya rasa menyimpan 401 untuk kesalahan ini tidak masalah, tetapi kita harus menambahkan saran tajuk ke pengecualian.

Mengenai yang lain, spesifikasi tidak secara eksplisit mengatakan bahwa 401 dapat digunakan dan dengan demikian kami mungkin harus mempertimbangkan untuk mengubah ke 400. Namun tampaknya lebih sesuai dengan 401 dalam hibah yang tidak valid dan terutama kesalahan klien yang tidak sah.

@asteinlein , @lepture , @masci pikiran?

@ib-lundgren Hai - baru saja menemukan masalah ini dan ingin ikut campur. Dari membaca spesifikasi dan melihat-lihat jawaban lain, IMO a 400 adalah respons yang benar.

Pertama, speknya:

Server otorisasi merespons dengan HTTP 400 (Permintaan Buruk)
kode status (kecuali ditentukan lain) dan termasuk yang berikut:
parameter dengan respons:

Tidak ada HARUS dalam 400 persyaratan, tetapi tidak ada MUNGKIN juga.

Kedua, dan alasan saya menemukan ini adalah melalui semacam bug di bawah sinar matahari JDK pada klien saya (lihat di sini: http://stackoverflow.com/a/7524681/1137254 )

Pada dasarnya, tumpukan HTTP klien saya akan menutup koneksi lebih awal untuk 401, tetapi tumpukan OAuth di atas (google-http-oauth-client) akan mencoba untuk terus membaca dan mengurai hasilnya. Saya pikir ini ditulis ke dalam OpenJDK sesuai definisi dan harapan sekitar 401 (PEMBARUAN: ini sebenarnya berkaitan dengan mode 'streaming'). IMO OpenJDK juga salah dan saya pikir saya akan mengalami masalah yang sama jika saya mendapatkan "invalid_client" 401 selama permintaan titik akhir /token.

Menambahkan suara lain untuk 400 menjadi kode kesalahan yang benar di sini. Kami dulu menggunakan penyedia django-oauth2 untuk otentikasi oauth2 dari aplikasi seluler, dan itu mengembalikan 400 dalam kasus ini. Saat beralih ke Django-oauth-toolkit (yang menggunakan oauthlib) untuk meningkatkan ke versi Django yang lebih baru, kami harus meretas tampilan permintaan token untuk mengembalikan 400 sebagai gantinya untuk menjaga aplikasi seluler bekerja dengan benar.

Berikut salah satu penulis spesifikasi yang secara khusus menyatakan bahwa 400 adalah respons yang dimaksudkan untuk kredensial otentikasi yang tidak valid saat meminta token, dan alasannya: https://www.ietf.org/mail-archive/web/oauth/current/msg02127 .html

Dan inilah contoh lain dari proyek yang mengalami masalah dalam mengatasi oauthlib menggunakan 401 dalam situasi ini.

+1 untuk 400

Suara untuk 400

Saya menghidupkan kembali utas lama ini & memulai PR dengan perubahan yang disarankan di atas.

Sebelum membuat kemajuan dalam hal ini, saya ingin meringkas diskusi yang terjadi di masa lalu.

  1. invalid_client , di mana itu HARUS 401 jika otentikasi HTTP digunakan, selain itu MUNGKIN 401 .
  2. invalid_token , di mana itu HARUS 401 .

Bagaimanapun, jika 401 digunakan, WWW-Authenticate HARUS disetel ( RFC2616 ).

Implementasi OAuth2.0 lainnya

Ikhtisar singkat tentang implementasi OAuth2.0 yang paling umum mirip dengan konsensus keseluruhan:

Kesimpulan

Kami harus menyelaraskan dengan RFC, namun untuk tidak merusak implementasi apa pun, kami tidak boleh menyertakan perubahan ini dalam versi 2.xx, tetapi tunggu hingga 3.xx

Silakan, jangan ragu untuk ikut campur.

Saya tidak dapat mengingat alasan/klien yang membuat saya mendorong PR #247, tetapi saya melihat dan memahami alasan untuk mengembalikan ini. Terima kasih atas penelitian yang luar biasa @JonathanHuot , dan melakukan ini dalam 3.x terdengar seperti pendekatan terbaik.

Diperbaiki di #561 / oauthlib>= 3.0.0

menurut RFC ini yang disebutkan di atas klien yang tidak valid juga harus mengembalikan status 400 tetapi dalam paket masih 401

Hai @esfandiaryfard , bisakah Anda menunjukkan teks RFC yang tepat? Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ViktorHaag picture ViktorHaag  ·  11Komentar

JonathanHuot picture JonathanHuot  ·  33Komentar

polamayster picture polamayster  ·  19Komentar

JonathanHuot picture JonathanHuot  ·  10Komentar

JonathanHuot picture JonathanHuot  ·  26Komentar