Koa middleware that validates JSON Web Tokens and sets ctx.state.user (by default) if a valid token is provided.
wemall 開源微商城 ,微信商城,商城源碼,三級分銷,微生鮮,微水果,微外賣,微訂餐---專業的o2o系統
koa-jwt
Koa JWT 認證中間件.
koa-jwt
Koa 中間件,用於驗證 JSON Web 令牌並在提供有效令牌時設定 ctx.state.user (預設)。
此模組可讓您在 Koa (node.js) 應用程式中使用 JSON Web Tokens 來驗證 HTTP 請求。
請參閱這篇文章以獲得很好的介紹。
安裝$ npm 安裝 koa-jwt
使用
JWT 驗證中間件使用 JWT 令牌對呼叫者進行身份驗證。如果令牌有效,則將使用解碼後的 JSON 物件設定 ctx.state.user (預設),以供後續中間件用於授權和存取控制。
令牌通常在 HTTP 標頭(授權)中提供,但也可以透過將 opts.cookie 選項設定為包含令牌的 cookie 的名稱來在 cookie 中提供。自訂令牌檢索也可以透過 opts.getToken 選項完成。提供的函數在正常的 Koa 上下文中調用,並應返回檢索到的令牌。
通常,您在 opts.secret 中提供單一共用金鑰,但另一種選擇是讓早期的中間件設定 ctx.state.secret,通常是每個要求。如果這個屬性存在,將會使用它來取代 opts.secret 中的屬性。
範例var koa = require('koa');<br>
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>
} 另外 {<br>
拋出錯誤;<br>
}<br>
}<br>
});<br>
<br>
// 未受保護的中間件<br>
app.use(函數*(下一個){<br>
如果(this.url.match(/^/public/)){<br>
this.body = '不受保護';<br>
} 另外 {<br>
產生下一個;<br>
}<br>
});<br>
<br>
// 只有當 JWT 令牌有效時才能到達此行下方的中間件 <br>
app.use(jwt({ secret: 'shared-secret' }));<br>
<br>
// 受保護的中間件<br>
app.use(函數*(){<br>
如果(this.url.match(/^/api/)){<br>
this.body = 'protectedn';<br>
}<br>
});<br>
<br>
app.listen(3000);
或者,您可以在某些條件下有條件地運行 jwt 中間件:var koa = require('koa');<br>
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>
如果(this.url.match(/^/public/)){<br>
this.body = '不受保護';<br>
} 另外 {<br>
產生下一個;<br>
}<br>
});<br>
<br>
// 受保護的中間件<br>
app.use(函數*(){<br>
如果(this.url.match(/^/api/)){<br>
this.body = 'protectedn';<br>
}<br>
});<br>
<br>
app.listen(3000);
有關 except 例外的更多信息,請查看 koa-unless。
您也可以新增passthrough 選項以始終產生next,即使沒有找到有效的授權標頭:app.use(jwt({ secret: 'shared-secret', passthrough: true }));
這可以讓下游中間件根據是否設定了ctx.state.user 進行決策。
如果您希望使用另一個 ctx key 來解碼數據,只需傳入 key,如下所示: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 Token 簽章與驗證
請注意,為了方便起見,koa-jwt 從上述模組中導出了簽名、驗證和解碼函數。
測驗
$ npm 安裝
$ npm 測試
作者
斯蒂安·格里托爾
積分
該程式碼很大程度上基於express-jwt。
Auth0
馬蒂亞斯·沃洛斯基
貢獻者
福克斯和xss
豆漿
tunnckoCore
格圖利奧jr
塞薩蘭德魯
麥可·韋斯特法爾
sc0ttyd
傑克龍
丹甘迺迪
許可證
麻省理工學院許可證
wemall開源微商城,微信商城,商城源碼,三級分銷,微生鮮,微水果,微外賣,微訂餐---專業的o2o系統
wemall網址:http://www.wemallshop.com
程式碼來源:http://js.koahub.com/home/feature/koa-jwt