Koa-Middleware, die JSON-Web-Tokens validiert und ctx.state.user (standardmäßig) festlegt, wenn ein gültiges Token bereitgestellt wird.
Wemall Open-Source-Mikro-Einkaufszentrum, WeChat-Einkaufszentrum, Mall-Quellcode, dreistufige Verteilung, Mikro-Frischelebensmittel, Mikro-Obst, Mikro-Imbiss, Mikro-Bestellung --- professionelles o2o-System
koa-jwt
Koa JWT-Authentifizierungs-Middleware.
koa-jwt
Koa-Middleware, die JSON-Web-Tokens validiert und ctx.state.user (standardmäßig) festlegt, wenn ein gültiges Token bereitgestellt wird.
Mit diesem Modul können Sie HTTP-Anfragen mithilfe von JSON-Web-Tokens in Ihren Koa-Anwendungen (node.js) authentifizieren.
Eine gute Einführung finden Sie in diesem Artikel.
Installieren$ npm install koa-jwt
Nutzung
Die JWT-Authentifizierungs-Middleware authentifiziert Anrufer mithilfe eines JWT-Tokens. Wenn das Token gültig ist, wird ctx.state.user (standardmäßig) mit dem dekodierten JSON-Objekt festgelegt, um von späterer Middleware für Autorisierung und Zugriffskontrolle verwendet zu werden.
Das Token wird normalerweise in einem HTTP-Header (Autorisierung) bereitgestellt, kann aber auch in einem Cookie bereitgestellt werden, indem die Option opts.cookie auf den Namen des Cookies gesetzt wird, das das Token enthält. Der benutzerdefinierte Tokenabruf kann auch über die Option opts.getToken erfolgen. Die bereitgestellte Funktion wird im normalen Koa-Kontext aufgerufen und sollte das abgerufene Token zurückgeben.
Normalerweise stellen Sie in opts.secret ein einzelnes gemeinsames Geheimnis bereit, aber eine andere Alternative besteht darin, eine frühere Middleware ctx.state.secret festzulegen, normalerweise pro Anfrage. Wenn diese Eigenschaft vorhanden ist, wird sie anstelle der in opts.secret.
verwendet
Beispielvar 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();
// Benutzerdefinierte 401-Behandlung, wenn Sie koa-jwt-Fehler nicht den Benutzern offenlegen möchten
app.use(function *(next){
Versuchen Sie es mit {
Als nächstes nachgeben;
} catch (err) {
if (401 == err.status) {
this.status = 401;
this.body = 'Geschützte Ressource, verwenden Sie den Autorisierungsheader, um Zugriff zu erhalten“;
} else {
throw err;
}
}
});
// Ungeschützte Middleware
app.use(function *(next){
if (this.url.match(/^/public/)) {
this.body = 'unprotectedn';
} else {
Als nächstes nachgeben;
}
});
// Die Middleware unterhalb dieser Zeile wird nur erreicht, wenn das JWT-Token gültig ist.
app.use(jwt({ secret: 'shared-secret' }));
// Geschützte Middleware
app.use(function *(){
if (this.url.match(/^/api/)) {
this.body = 'protectedn';
}
});
app.listen(3000);
Alternativ können Sie die JWT-Middleware unter bestimmten Bedingungen bedingt ausführen:var koa = require('koa');
var jwt = require('koa-jwt');
var app = koa();
// Die Middleware unterhalb dieser Zeile wird nur erreicht, wenn das JWT-Token gültig ist.
// es sei denn, die URL beginnt mit '/public'
app.use(jwt({ secret: 'shared-secret' }).unless({ path: [/^/public/] }));
// Ungeschützte Middleware
app.use(function *(next){
if (this.url.match(/^/public/)) {
this.body = 'unprotectedn';
} else {
Als nächstes nachgeben;
}
});
// Geschützte Middleware
app.use(function *(){
if (this.url.match(/^/api/)) {
this.body = 'protectedn';
}
});
app.listen(3000);
Weitere Informationen zu Ausnahmen finden Sie unter koa-unless.Sie können auch die Passthrough-Option hinzufügen, um immer als Nächstes nachzugeben, auch wenn kein gültiger Autorisierungsheader gefunden wurde:app.use(jwt({ secret: 'shared-secret', passthrough: true }));
Dadurch kann die Downstream-Middleware Entscheidungen basierend darauf treffen, ob ctx.state.user festgelegt ist.
Wenn Sie lieber einen anderen ctx-Schlüssel für die dekodierten Daten verwenden möchten, übergeben Sie einfach den Schlüssel, etwa so:app.use(jwt({ secret: 'shared-secret', key: 'jwtdata' }));
Dadurch stehen die dekodierten Daten als ctx.state.jwtdata.
zur Verfügung
Sie können auch Zielgruppe und/oder Aussteller angeben: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' }));
Zielgruppe: 'http://myapi/protected',
Issuer: 'http://issuer' }));Wenn das JWT ein Ablaufdatum (exp) hat, wird es überprüft.
Dieses Modul unterstützt auch Token, die mit öffentlichen/privaten Schlüsselpaaren signiert sind. Anstelle eines Geheimnisses können Sie einen Puffer mit dem öffentlichen Schlüssel angeben: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 }));
Verwandte Module
jsonwebtoken – JSON-Web-Token-Signatur und -Verifizierung
Beachten Sie, dass koa-jwt der Einfachheit halber die Funktionen zum Signieren, Verifizieren und Dekodieren aus dem oben genannten Modul exportiert.
Tests
$ npm install
$ npm-Test
Autor
Stian Grytøyr
Credits
Dieser Code basiert größtenteils auf express-jwt.
Auth0
Matias Woloski
Mitwirkende
Foxandxss
Sojagul
tunnckoCore
getuliojr
cesarandreu
michaelwestphal
sc0ttyd
Jackong
danwkennedy
Lizenzen
Die MIT-Lizenz
wemall 开源微商城,微信商城,商城源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统
wemall地址:http://www.wemallshop.com
代码来源:http://js.koahub.com/home/feature/koa-jwt