Koa.js-인증

인증은 제공된 자격 증명을 로컬 운영 체제 또는 인증 서버 내에서 권한이 부여 된 사용자 정보 데이터베이스의 파일에있는 것과 비교하는 프로세스입니다. 자격 증명이 일치하면 프로세스가 완료되고 사용자에게 액세스 권한이 부여됩니다.

우리는 사용할 매우 기본적인 인증 시스템을 만들 것입니다. Basic HTTP Authentication. 이것은 쿠키, 세션 또는 다른 것이 필요하지 않기 때문에 액세스 제어를 시행하는 가장 간단한 방법입니다. 이를 사용하려면 클라이언트는 모든 요청과 함께 Authorization 헤더를 보내야합니다. 사용자 이름과 비밀번호는 암호화되지 않지만 다음과 같이 단일 문자열로 연결됩니다.

username:password

이 문자열은 Base64로 인코딩되며 Basic이라는 단어가이 값 앞에 놓입니다. 예를 들어 사용자 이름이 Ayush이고 비밀번호 India 인 경우 문자열"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 −이 경로는 인증 여부에 관계없이 누구나 액세스 할 수 있습니다.

이제 인증 헤더없이 또는 잘못된 자격 증명을 사용하여 / protected에 요청을 보내면 오류가 발생합니다. 예를 들면

$ 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.

/ unprotected 경로는 여전히 모든 사람이 액세스 할 수 있습니다.