JSON Web トークンを検証し、有効なトークンが提供された場合に ctx.state.user (デフォルト) を設定する Koa ミドルウェア。
wemall オープンソース マイクロ モール、WeChat モール、モール ソース コード、3 レベルの流通、マイクロ生鮮食品、マイクロ フルーツ、マイクロ テイクアウト、マイクロ注文---プロフェッショナル O2O システム
コアjwt
Koa JWT 認証ミドルウェア
コアjwt
JSON Web トークンを検証し、有効なトークンが提供された場合に ctx.state.user (デフォルト) を設定する Koa ミドルウェア。
このモジュールを使用すると、Koa (node.js) アプリケーションで JSON Web トークンを使用して HTTP リクエストを認証できます。
詳しい紹介については、この記事を参照してください。
インストール$ npm install koa-jwt
使用方法
JWT 認証ミドルウェアは、JWT トークンを使用して呼び出し元を認証します。トークンが有効な場合、ctx.state.user (デフォルト) にはデコードされた JSON オブジェクトが設定され、後のミドルウェアによる認可とアクセス制御に使用されます。
トークンは通常、HTTP ヘッダー (認可) で提供されますが、opts.cookie オプションをトークンを含む Cookie の名前に設定することで、Cookie で提供することもできます。カスタム トークンの取得は、opts.getToken オプションを通じて行うこともできます。提供された関数は通常の Koa コンテキストで呼び出され、取得されたトークンを返す必要があります。
通常、opts.secret で単一の共有シークレットを指定しますが、別の代替方法として、通常はリクエストごとに、以前のミドルウェアで ctx.state.secret を設定することもできます。このプロパティが存在する場合、opts.secret.
のプロパティの代わりに使用されます。
例var koa = require('koa');
var jwt = require('koa-jwt');<br>
<br>
var app = koa();<br>
<br>
// koa-jwt エラーをユーザーに公開したくない場合のカスタム 401 処理 <br>
app.use(関数*(次){<br>
試してみてください{<br>
次に譲ります;<br>
} キャッチ (エラー) {<br>
if (401 == err.status) {<br>
this.status = 401;<br>
this.body = '保護されたリソース。アクセスするには認証ヘッダーを使用してください';<br>
} else {<br>
エラーを投げます;<br>
}<br>
}<br>
});<br>
<br>
// 保護されていないミドルウェア <br>
app.use(関数*(次){<br>
if (this.url.match(/^/public/)) {<br>
this.body = '保護されていない';<br>
} else {<br>
次に譲ります;<br>
}<br>
});<br>
<br>
// この行の下のミドルウェアは、JWT トークンが有効な場合にのみ到達します <br>
app.use(jwt({ secret: 'shared-secret' }));<br>
<br>
// 保護された ミドルウェア <br>
app.use(function *(){<br>
if (this.url.match(/^/api/)) {<br>
this.body = 'protectedn';<br>
}<br>
});<br>
<br>
app.listen(3000);<br>
あるいは、特定の条件下で jwt ミドルウェアを条件付きで実行することもできます:
var koa = require('koa');
var jwt = require('koa-jwt');<br>
<br>
var app = koa();<br>
<br>
// この行の下のミドルウェアは、JWT トークンが有効な場合にのみ到達します <br>
// URL が「/public」で始まらない限り <br>
app.use(jwt({ secret: 'shared-secret' }).unless({ path: [/^/public/] }));<br>
<br>
// 保護されていないミドルウェア <br>
app.use(関数*(次){<br>
if (this.url.match(/^/public/)) {<br>
this.body = '保護されていない';<br>
} else {<br>
次に譲ります;<br>
}<br>
});<br>
<br>
// 保護された ミドルウェア <br>
app.use(function *(){<br>
if (this.url.match(/^/api/)) {<br>
this.body = 'protectedn';<br>
}<br>
});<br>
<br>
app.listen(3000);<br>
例外の詳細については、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',<br>
視聴者: 'http://myapi/protected',<br>
issuer: 'http://issuer' }));
JWT に有効期限 (exp) がある場合、チェックされます。
このモジュールは、公開鍵と秘密鍵のペアで署名されたトークンもサポートします。シークレットの代わりに、公開キーを使用してバッファを指定できます:
var publicKey = fs.readFileSync('/path/to/public.pub');<br>
app.use(jwt({ secret: publicKey }));
関連モジュール
jsonwebtoken — JSON Web トークンの署名と検証
koa-jwt は、便宜上、上記のモジュールから署名、検証、およびデコード関数をエクスポートすることに注意してください。
テスト
$ npm インストール
$npmテスト
作者
スティアン・グリトール
クレジット
このコードは主にexpress-jwtに基づいています
認証0
マティアス・ウォロスキー
寄稿者
きつね
ソグル
つんこコア
セサランドレウ
マイケルウェストファル
ジャッコン
ダンケネディ
ライセンス
MITライセンス
wemall 开源微商城 、微信商城、商城源码、三级分销、微生鲜、微水果、微外卖、微订餐---专业的o2o系统
wemall地址:http://www.wemallshop.com
代来源:http://js.koahub.com/home/feature/koa-jwt