Koa.js - Otentikasi
Otentikasi adalah proses di mana kredensial yang diberikan dibandingkan dengan yang ada di file dalam database informasi pengguna yang sah di sistem operasi lokal atau dalam server otentikasi. Jika kredensial cocok, prosesnya selesai dan pengguna diberikan otorisasi untuk akses.
Kami akan membuat sistem otentikasi yang sangat dasar yang akan digunakan Basic HTTP Authentication. Ini adalah cara yang paling sederhana untuk menerapkan kontrol akses karena tidak memerlukan cookie, sesi, atau apa pun. Untuk menggunakan ini, klien harus mengirim header Otorisasi bersama dengan setiap permintaan yang dibuatnya. Nama pengguna dan kata sandi tidak dienkripsi, tetapi digabungkan dalam satu string seperti berikut.
username:password
String ini dikodekan dengan Base64, dan kata Basic diletakkan sebelum nilai ini. Misalnya, jika nama pengguna Anda adalah Ayush dan kata sandi India, maka string"Ayush:India" akan dikirim sebagai dikodekan di header otorisasi.
Authorization: Basic QXl1c2g6SW5kaWE=
Untuk menerapkan ini di aplikasi koa Anda, Anda memerlukan middleware koa-basic-auth. Instal menggunakan -
$ npm install --save koa-basic-auth
Sekarang buka file app.js Anda dan masukkan kode berikut di dalamnya.
//This is what the authentication would be checked against
var credentials = { name: 'Ayush', pass: 'India' }
var koa = require('koa');
var auth = require('koa-basic-auth');
var _ = require('koa-router')();
var app = koa();
//Error handling middleware
app.use(function *(next){
try {
yield next;
} catch (err) {
if (401 == err.status) {
this.status = 401;
this.set('WWW-Authenticate', 'Basic');
this.body = 'You have no access here';
} else {
throw err;
}
}
});
// Set up authentication here as first middleware.
// This returns an error if user is not authenticated.
_.get('/protected', auth(credentials), function *(){
this.body = 'You have access to the protected area.';
yield next;
});
// No authentication middleware present here.
_.get('/unprotected', function*(next){
this.body = "Anyone can access this area";
yield next;
});
app.use(_.routes());
app.listen(3000);
Kami telah membuat middleware penanganan kesalahan untuk menangani semua kesalahan terkait otentikasi. Kemudian, kami telah membuat 2 rute -
/protected- Rute ini hanya dapat diakses jika pengguna mengirimkan header otentikasi yang benar. Untuk yang lainnya, ini akan memberikan kesalahan.
/unprotected - Rute ini dapat diakses oleh siapa saja, dengan atau tanpa otentikasi.
Sekarang jika Anda mengirim permintaan ke / dilindungi tanpa header otentikasi atau dengan kredensial yang salah, Anda akan menerima kesalahan. Sebagai contoh,
$ curl https://localhost:3000/protected
Anda akan menerima tanggapan sebagai -
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
Content-Type: text/plain; charset=utf-8
Content-Length: 28
Date: Sat, 17 Sep 2016 19:05:56 GMT
Connection: keep-alive
Please authenticate yourself
Namun, dengan kredensial yang tepat, Anda akan mendapatkan respons yang diharapkan. Sebagai contoh,
$ curl -H "Authorization: basic QXl1c2g6SW5kaWE=" https://localhost:3000/protected -i
Anda akan mendapatkan tanggapan sebagai -
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 38
Date: Sat, 17 Sep 2016 19:07:33 GMT
Connection: keep-alive
You have access to the protected area.
Rute / tidak terlindungi masih dapat diakses oleh semua orang.