Ini adalah pertanyaan konseptual.
Saya memiliki aplikasi klien (seluler) yang perlu mendukung tindakan login terhadap layanan web RESTful. Karena layanan web RESTful, ini berarti klien menerima nama pengguna / kata sandi dari pengguna, memverifikasi nama pengguna / kata sandi itu dengan layanan, dan kemudian hanya mengingat untuk mengirim nama pengguna / kata sandi itu dengan semua permintaan berikutnya.
Semua tanggapan lain di layanan web ini disediakan dalam format JSON.
Pertanyaannya adalah, ketika saya menanyakan layanan web hanya untuk mengetahui apakah nama pengguna / kata sandi yang diberikan valid, haruskah layanan web selalu merespons dengan data JSON yang memberi tahu saya berhasil atau tidak, atau haruskah mengembalikan HTTP 200 dengan kredensial yang baik dan HTTP 401 tentang kredensial buruk.
Alasan saya bertanya adalah bahwa beberapa layanan RESTful lainnya menggunakan 401 untuk kredensial yang buruk bahkan ketika Anda hanya menanyakan apakah kredensial tersebut valid. Namun, pemahaman saya tentang 401 tanggapan adalah bahwa mereka mewakili sumber daya yang seharusnya tidak dapat Anda akses tanpa kredensial yang valid. Tetapi sumber daya login HARUS dapat diakses oleh siapa pun karena seluruh tujuan sumber daya login adalah untuk memberi tahu Anda apakah kredensial Anda valid.
Dengan kata lain, menurut saya permintaan seperti:
myservice.com/this/is/a/user/action
harus mengembalikan 401 jika kredensial buruk diberikan. Tapi permintaan seperti:
myservice.com/are/these/credentials/valid
tidak boleh mengembalikan 401 karena URL (permintaan) tersebut diotorisasi dengan atau tanpa kredensial yang valid.
Saya ingin mendengar beberapa pendapat yang dapat dibenarkan tentang hal ini. Apa cara standar untuk menangani ini, dan apakah cara standar penanganan ini sesuai secara logis?
authentication is required and has failed or has not yet been provided
berlaku, karena Anda tidak meminta validitas kredensial, tetapi untuk sumber daya tertentu berdasarkan kredensial yang Anda berikan.401 harus dikirim hanya jika permintaan membutuhkan kolom header otorisasi dan otorisasi gagal. Karena API Login tidak memerlukan otorisasi, maka 401 adalah kode kesalahan yang salah menurut saya
Sesuai standar di sini https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
* 10.4.2 401 Tidak Resmi
Permintaan tersebut membutuhkan otentikasi pengguna. Respons HARUS menyertakan kolom header WWW-Authenticate (bagian 14.47) yang berisi tantangan yang berlaku untuk sumber daya yang diminta. Klien DAPAT mengulangi permintaan dengan bidang header Otorisasi yang sesuai (bagian 14.8). Jika permintaan sudah menyertakan kredensial Otorisasi, maka respons 401 menunjukkan bahwa otorisasi telah ditolak untuk kredensial tersebut. Jika respons 401 berisi tantangan yang sama dengan respons sebelumnya, dan agen pengguna telah mencoba autentikasi setidaknya satu kali, pengguna HARUS diberikan entitas yang diberikan dalam respons, karena entitas tersebut mungkin menyertakan informasi diagnostik yang relevan. Otentikasi akses HTTP dijelaskan dalam "Otentikasi HTTP: Otentikasi Akses Dasar dan Intisari" [43]. *
sumber
Kembalikan 409 dengan pesan kesalahan yang benar.
sumber