JSON 웹 토큰을 검증하고 유효한 토큰이 제공되면 ctx.state.user(기본값)를 설정하는 Koa 미들웨어입니다.
위몰 오픈소스 마이크로몰, 위챗몰, 쇼핑몰 소스코드, 3단계 유통, 마이크로 신선식품, 마이크로 과일, 마이크로 테이크아웃, 마이크로 주문 --- 전문적인 O2O 시스템
koa-jwt
Koa JWT 인증 미들웨어.
koa-jwt
JSON 웹 토큰을 검증하고 유효한 토큰이 제공되면 ctx.state.user(기본값)를 설정하는 Koa 미들웨어입니다.
이 모듈을 사용하면 Koa(node.js) 애플리케이션에서 JSON 웹 토큰을 사용하여 HTTP 요청을 인증할 수 있습니다.
좋은 소개를 보려면 이 기사를 참조하세요.
설치$ npm install koa-jwt
사용방법
JWT 인증 미들웨어는 JWT 토큰을 사용하여 호출자를 인증합니다. 토큰이 유효한 경우 ctx.state.user(기본적으로)는 인증 및 액세스 제어를 위해 이후 미들웨어에서 사용되도록 디코딩된 JSON 개체로 설정됩니다.
토큰은 일반적으로 HTTP 헤더(Authorization)에 제공되지만 opts.cookie 옵션을 토큰이 포함된 쿠키의 이름으로 설정하여 쿠키에 제공할 수도 있습니다. 사용자 정의 토큰 검색은 opts.getToken 옵션을 통해서도 수행할 수 있습니다. 제공된 함수는 일반 Koa 컨텍스트에서 호출되며 검색된 토큰을 반환해야 합니다.
일반적으로 opts.secret에 단일 공유 비밀을 제공하지만 또 다른 대안은 일반적으로 요청별로 이전 미들웨어 세트 ctx.state.secret을 갖는 것입니다. 이 속성이 존재하는 경우 opts.secret의 속성 대신 사용됩니다.
예var koa = require('koa');<code class="prettyprint linenums lang-php">var koa = require('koa');<br>
var jwt = require('koa-jwt');<br>
<br>
var app = koa();<br>
<br>
// Custom 401 handling if you don't want to expose koa-jwt errors to users <br>
app.use(function *(next){<br>
try {<br>
yield next;<br>
} catch (err) {<br>
if (401 == err.status) {<br>
this.status = 401;<br>
this.body = 'Protected resource, use Authorization header to get accessn';<br>
} else {<br>
throw err;<br>
}<br>
}<br>
});<br>
<br>
// Unprotected middleware <br>
app.use(function *(next){<br>
if (this.url.match(/^/public/)) {<br>
this.body = 'unprotectedn';<br>
} else {<br>
yield next;<br>
}<br>
});<br>
<br>
// Middleware below this line is only reached if JWT token is valid <br>
app.use(jwt({ secret: 'shared-secret' }));<br>
<br>
// Protected middleware <br>
app.use(function *(){<br>
if (this.url.match(/^/api/)) {<br>
this.body = 'protectedn';<br>
}<br>
});<br>
<br>
app.listen(3000);
var jwt = require('koa-jwt');
var koa = require('koa');<br>
var jwt = require('koa-jwt');<br>
<br>
var app = koa();<br>
<br>
// Middleware below this line is only reached if JWT token is valid <br>
// unless the URL starts with '/public' <br>
app.use(jwt({ secret: 'shared-secret' }).unless({ path: [/^/public/] }));<br>
<br>
// Unprotected middleware <br>
app.use(function *(next){<br>
if (this.url.match(/^/public/)) {<br>
this.body = 'unprotectedn';<br>
} else {<br>
yield next;<br>
}<br>
});<br>
<br>
// Protected middleware <br>
app.use(function *(){<br>
if (this.url.match(/^/api/)) {<br>
this.body = 'protectedn';<br>
}<br>
});<br>
<br>
app.listen(3000);
var app = koa();
// 사용자에게 koa-jwt 오류를 노출하고 싶지 않은 경우 맞춤 401 처리
app.use(function *(다음){
시도해 보세요 {
양보 다음;
} catch(err) {
if (401 == err.status) {
this.status = 401;
this.body = '보호된 리소스, 액세스하려면 승인 헤더를 사용하세요.';
} 그밖에 {
던지기 오류;
}
}
});
// 보호되지 않는 미들웨어
app.use(function *(다음){
if (this.url.match(/^/public/)) {
this.body = '보호되지 않음';
} 그밖에 {
양보 다음;
}
});
// 이 줄 아래의 미들웨어는 JWT 토큰이 유효한 경우에만 도달합니다.
app.use(jwt({ secret: 'shared-secret' }));
// 보호되는 미들웨어
app.use(함수 *(){
if (this.url.match(/^/api/)) {
this.body = '보호됨';
}
});
app.listen(3000);
또는 특정 조건에서 jwt 미들웨어를 조건부로 실행할 수 있습니다:var koa = require('koa');
var jwt = require('koa-jwt');
var app = koa();
// 이 줄 아래의 미들웨어는 JWT 토큰이 유효한 경우에만 도달합니다.
// URL이 '/public'으로 시작하지 않는 한
app.use(jwt({ 비밀: '공유 비밀' }).unless({ 경로: [/^/public/] }));
// 보호되지 않는 미들웨어
app.use(function *(다음){
if (this.url.match(/^/public/)) {
this.body = '보호되지 않음';
} 그밖에 {
양보 다음;
}
});
// 보호되는 미들웨어
app.use(함수 *(){
if (this.url.match(/^/api/)) {
this.body = '보호됨';
}
});
app.listen(3000);
예외 제외에 대한 자세한 내용은 koa-unless를 확인하세요.유효한 Authorization 헤더가 발견되지 않은 경우에도 항상 다음을 생성하도록 패스스루 옵션을 추가할 수도 있습니다.app.use(jwt({ secret: 'shared-secret', passthrough: true }));
이를 통해 다운스트림 미들웨어는 ctx.state.user 설정 여부에 따라 결정을 내릴 수 있습니다.
디코딩된 데이터에 다른 ctx 키를 사용하려면 다음과 같이 키를 전달하세요.app.use(jwt({ secret: 'shared-secret', key: 'jwtdata' }));
이렇게 하면 디코딩된 데이터를 ctx.state.jwtdata로 사용할 수 있습니다.
대상 및/또는 발급자도 지정할 수 있습니다.app.use(jwt({ secret: 'shared-secret',<code class="prettyprint linenums lang-php">app.use(jwt({ secret: 'shared-secret',<br>
audience: 'http://myapi/protected',<br>
issuer: 'http://issuer' }));
대상: 'http://myapi/protected',
발급자: 'http://issuer' }));JWT에 만료(exp)가 있으면 확인됩니다.
이 모듈은 공개/개인 키 쌍으로 서명된 토큰도 지원합니다. 비밀 대신 공개 키를 사용하여 버퍼를 지정할 수 있습니다.var publicKey = fs.readFileSync('/path/to/public.pub');<br>
app.use(jwt({ secret: publicKey }));
var publicKey = fs.readFileSync('/path/to/public.pub');<br>
app.use(jwt({ secret: publicKey }));
관련 모듈
jsonwebtoken — JSON 웹 토큰 서명 및 확인
koa-jwt는 편의를 위해 위 모듈의 서명, 확인 및 디코딩 기능을 내보냅니다.
테스트
$ npm 설치
$ npm 테스트
작가
스티안 그리퇴이르
크레딧
이 코드는 주로 express-jwt를 기반으로 합니다.
인증0
마티아스 월로스키
기고자
폭샌드xss
소이굴
tunncko코어
게툴리오쥬르
세사란드르
마이클웨스트팔
sc0ttyd
자콩
단케네디
라이센스
MIT 라이선스
wemall 开源微商城 ,微信商city,商city源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统
wemall地址:http://www.wemallshop.com
代码来源:http://js.koahub.com/home/feature/koa-jwt