Koa.js - การรับรองความถูกต้อง

การพิสูจน์ตัวตนเป็นกระบวนการที่ข้อมูลประจำตัวที่ให้มาเปรียบเทียบกับข้อมูลประจำตัวที่อยู่ในฐานข้อมูลของข้อมูลผู้ใช้ที่ได้รับอนุญาตบนระบบปฏิบัติการภายในหรือภายในเซิร์ฟเวอร์การพิสูจน์ตัวตน หากข้อมูลรับรองตรงกันกระบวนการจะเสร็จสมบูรณ์และผู้ใช้จะได้รับสิทธิ์ในการเข้าถึง

เราจะสร้างระบบตรวจสอบสิทธิ์ขั้นพื้นฐานที่จะใช้ Basic HTTP Authentication. นี่เป็นวิธีที่ง่ายที่สุดในการบังคับใช้การควบคุมการเข้าถึงเนื่องจากไม่ต้องใช้คุกกี้เซสชันหรือสิ่งอื่นใด ในการใช้งานไคลเอ็นต์จะต้องส่งส่วนหัวการอนุญาตพร้อมกับทุกคำขอ ชื่อผู้ใช้และรหัสผ่านไม่ได้เข้ารหัส แต่จะเชื่อมต่อกันเป็นสตริงเดียวดังต่อไปนี้

username:password

สตริงนี้เข้ารหัสด้วย Base64 และคำว่า Basic จะอยู่หน้าค่านี้ ตัวอย่างเช่นหากชื่อผู้ใช้ของคุณคือ Ayush และรหัสผ่านอินเดียให้ใช้สตริง"Ayush:India" จะถูกส่งแบบเข้ารหัสในส่วนหัวการอนุญาต

Authorization: Basic QXl1c2g6SW5kaWE=

ในการใช้สิ่งนี้ในแอป koa ของคุณคุณจะต้องมีมิดเดิลแวร์ koa-basic-auth ติดตั้งโดยใช้ -

$ npm install --save koa-basic-auth

ตอนนี้เปิดไฟล์ app.js ของคุณแล้วป้อนรหัสต่อไปนี้

//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);

เราได้สร้างข้อผิดพลาดในการจัดการมิดเดิลแวร์เพื่อจัดการข้อผิดพลาดที่เกี่ยวข้องกับการตรวจสอบสิทธิ์ทั้งหมด จากนั้นเราได้สร้าง 2 เส้นทาง -

  • /protected- สามารถเข้าถึงเส้นทางนี้ได้ก็ต่อเมื่อผู้ใช้ส่งส่วนหัวการตรวจสอบสิทธิ์ที่ถูกต้อง สำหรับคนอื่น ๆ ทั้งหมดจะให้ข้อผิดพลาด

  • /unprotected - ทุกคนสามารถเข้าถึงเส้นทางนี้โดยมีหรือไม่มีการตรวจสอบสิทธิ์

ตอนนี้หากคุณส่งคำขอไปยัง / ป้องกันโดยไม่มีส่วนหัวการตรวจสอบสิทธิ์หรือข้อมูลรับรองไม่ถูกต้องคุณจะได้รับข้อผิดพลาด ตัวอย่างเช่น,

$ curl https://localhost:3000/protected

คุณจะได้รับคำตอบเป็น -

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

อย่างไรก็ตามด้วยข้อมูลรับรองที่ถูกต้องคุณจะได้รับคำตอบที่คาดหวัง ตัวอย่างเช่น,

$ curl -H "Authorization: basic QXl1c2g6SW5kaWE=" https://localhost:3000/protected -i

คุณจะได้รับคำตอบเป็น -

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.

ทุกคนยังสามารถเข้าถึงเส้นทาง / ที่ไม่มีการป้องกันได้