Koa.js - Xác thực
Xác thực là một quá trình trong đó thông tin xác thực được cung cấp được so sánh với thông tin trong hồ sơ trong cơ sở dữ liệu thông tin của người dùng được ủy quyền trên hệ điều hành cục bộ hoặc trong máy chủ xác thực. Nếu thông tin xác thực khớp, quá trình hoàn tất và người dùng được cấp quyền truy cập.
Chúng tôi sẽ tạo ra một hệ thống xác thực rất cơ bản sẽ sử dụng Basic HTTP Authentication. Đây là cách đơn giản nhất có thể để thực thi kiểm soát truy cập vì nó không yêu cầu cookie, phiên hoặc bất kỳ thứ gì khác. Để sử dụng điều này, máy khách phải gửi tiêu đề Ủy quyền cùng với mọi yêu cầu mà nó đưa ra. Tên người dùng và mật khẩu không được mã hóa, nhưng được nối trong một chuỗi duy nhất như sau.
username:password
Chuỗi này được mã hóa bằng Base64 và từ Basic được đặt trước giá trị này. Ví dụ: nếu tên người dùng của bạn là Ayush và mật khẩu là Ấn Độ, thì chuỗi"Ayush:India" sẽ được gửi dưới dạng mã hóa trong tiêu đề ủy quyền.
Authorization: Basic QXl1c2g6SW5kaWE=
Để triển khai điều này trong ứng dụng koa của bạn, bạn sẽ cần phần mềm trung gian koa-basic-auth. Cài đặt nó bằng -
$ npm install --save koa-basic-auth
Bây giờ, hãy mở tệp app.js của bạn và nhập mã sau vào đó.
//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);
Chúng tôi đã tạo phần mềm trung gian xử lý lỗi để xử lý tất cả các lỗi liên quan đến xác thực. Sau đó, chúng tôi đã tạo 2 tuyến đường -
/protected- Tuyến đường này chỉ có thể được truy cập nếu người dùng gửi tiêu đề xác thực chính xác. Đối với tất cả những người khác, nó sẽ báo lỗi.
/unprotected - Tuyến đường này có thể được truy cập bởi bất kỳ ai, có hoặc không có xác thực.
Bây giờ nếu bạn gửi một yêu cầu đến / bảo vệ mà không có tiêu đề xác thực hoặc với thông tin đăng nhập sai, bạn sẽ nhận được lỗi. Ví dụ,
$ curl https://localhost:3000/protected
Bạn sẽ nhận được phản hồi là -
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
Tuy nhiên, với thông tin đăng nhập phù hợp, bạn sẽ nhận được phản hồi như mong đợi. Ví dụ,
$ curl -H "Authorization: basic QXl1c2g6SW5kaWE=" https://localhost:3000/protected -i
Bạn sẽ nhận được phản hồi là -
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.
Mọi người vẫn có thể truy cập vào tuyến đường / không được bảo vệ.