Respons server 401 Unauthorized
Kode Status HTTP 401 (Unauthorized)
Kode status HTTP 401 menunjukkan bahwa permintaan tidak dapat diterapkan karena tidak adanya autentikasi yang valid untuk sumber daya yang ditargetkan. Kode ini sering muncul dalam pengembangan web dan dapat menyebabkan kebingungan di kalangan pengembang, terutama saat bekerja dengan API. Dalam artikel ini, kita akan membahas penyebab umum munculnya kode status ini, serta memberikan contoh praktis dan cara memperbaikinya dalam berbagai bahasa pemrograman.
Penyebab Munculnya Status 401
- Ketiadaan data autentikasi
- Data kredensial yang salah
- Token akses yang sudah kedaluwarsa
- Format header autentikasi yang tidak tepat
Contoh Praktis
-
Contoh 1: Kesalahan saat mengakses sumber daya yang dilindungi
Situasi: Pengguna mencoba mengakses API yang memerlukan autentikasi tetapi tidak memberikan kredensial.
Perilaku yang Diharapkan: Server mengembalikan status 401.
-
Contoh 2: Kredensial yang salah
Situasi: Pengguna mengirimkan permintaan dengan login dan password yang salah.
Perilaku yang Diharapkan: Server mengembalikan status 401 dengan pesan kegagalan autentikasi.
-
Contoh 3: Penggunaan token yang sudah kadaluarsa
Situasi: Pengguna mencoba menggunakan token yang telah kedaluwarsa.
Perilaku yang Diharapkan: Server mengembalikan status 401 dengan permintaan untuk memperbarui token.
Cara Memperbaiki Kesalahan 401 dalam Berbagai Bahasa Pemrograman
1. JavaScript (Node.js)
Dalam Node.js, kita dapat menggunakan pustaka jsonwebtoken
untuk menangani autentikasi. Berikut adalah contoh kode yang memeriksa token dan mengembalikan status 401 jika token tidak ada atau tidak valid:
const jwt = require('jsonwebtoken');
app.get('/protected', (req, res) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).send('Unauthorized');
}
jwt.verify(token, 'secret_key', (err, user) => {
if (err) {
return res.status(401).send('Unauthorized');
}
res.send('Access granted');
});
});
2. Python (Flask)
Kita dapat menggunakan pustaka Flask
untuk memeriksa data autentikasi. Contoh kode berikut mengembalikan status 401 jika pengguna tidak terautentikasi:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/protected')
def protected():
auth = request.authorization
if not auth or not (auth.username == 'user' and auth.password == 'pass'):
return jsonify({'message': 'Unauthorized'}), 401
return jsonify({'message': 'Access granted'})
3. PHP
Dalam PHP, kita dapat memeriksa header untuk menangani autentikasi. Berikut adalah contoh kode yang memeriksa header dan mengembalikan status 401 jika autentikasi tidak ada:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
exit;
} else {
if ($_SERVER['PHP_AUTH_USER'] !== 'user' || $_SERVER['PHP_AUTH_PW'] !== 'pass') {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
exit;
}
echo 'Access granted';
}
?>
Tabel Ringkasan Penyebab dan Penanganan Kode Status 401
Penyebab | Solusi |
---|---|
Ketiadaan data autentikasi | Pastikan untuk menyertakan kredensial dalam permintaan. |
Data kredensial yang salah | Periksa dan verifikasi kredensial yang digunakan. |
Token akses yang sudah kedaluwarsa | Perbarui token akses sebelum mengirim permintaan. |
Format header autentikasi yang tidak tepat | Pastikan format header sesuai dengan standar yang ditetapkan. |
Kode Tambahan
Kode | Deskripsi |
---|---|
401.1 | Logon gagal - Upaya logon gagal karena nama pengguna atau kata sandi salah. |
401.2 | Logon gagal karena konfigurasi server - Ada masalah dengan konfigurasi autentikasi di server. |
401.3 | Tidak sah karena ACL pada sumber daya - Akses ditolak karena izin sistem berkas NTFS. |
401.4 | Otorisasi gagal oleh filter - Filter ISAPI memblokir permintaan karena masalah otorisasi. |
401.5 | Otorisasi gagal oleh aplikasi ISAPI/CGI - Aplikasi ISAPI atau CGI memblokir permintaan karena masalah otorisasi. |
401.501 | Akses ditolak: batas laju permintaan serentak tercapai - Terlalu banyak permintaan serentak dari IP klien yang sama. |
401.502 | Akses ditolak: batas laju permintaan maksimum tercapai - IP klien melampaui jumlah maksimum permintaan dalam waktu yang ditentukan. |
401.503 | Akses ditolak: Alamat IP ditolak - Alamat IP klien ada dalam daftar penolakan. |
401.504 | Akses ditolak: nama host ditolak - Nama host klien ada dalam daftar penolakan. |