用於驗證的 Passport.js 與 JsonWebToken 是什麼關係?

  • 使用 AngularJS NodeJS 實現基於 token 的認證應用 - 前端外刊評論 - 知乎專欄

  • passport.js學習筆記
  • Socket.io基於Token的認證


第一次答題,未邀自來

passport是一個簡單的專註與用戶驗證的nodejs庫,它擁有很多用於驗證的策略passport 比方說Local(本地鏈接資料庫,自己實現驗證邏輯),OpenID(基於OpenID的驗證),Google(谷歌賬戶的驗證),開發者可以根據業務需求,選擇一種或多種策略來構建自己應用的驗證模塊就像這樣

//為項目中的passport增加本地驗證的策略
passport.use(new LocalStrategy(
function (username, password, done) {
// 鏈接資料庫,進行驗證
#yourcode#
}
));

//在介面中使用passport來進行驗證
router.get("/token", passport.authenticate("local"),
function (req, res) {
res.send({#token#});
}
);

JSON Web Tokens 是一種非常輕巧的規範,這個規範規定了客戶端與伺服器交互時的一些信息的傳遞方式,它分為三部,頭部載荷簽名

頭部(Header)

用於描述這個應用中使用的JWT的基本信息,如簽名所用的加密方法等

{
"typ": "JWT",
"alg": "HS256"
}

typ:種類

alg:加密類型

你當然可以使用其他的加密演算法

載荷(Payload)

用於描述這個應用中使用的JWT的實際信息,如接收方,過期時間等

{
"iss": "John Wu JWT",
"iat": 1441593502,
"exp": 1441594722,
"aud": "www.example.com",
"sub": "jrocket@example.com",
"from_user": "B",
"target_user": "A"
}

iss: 該jwt的簽發者

iat:簽發時間

aud:接收方

簽名(簽名)

用於校驗Header和Payload的合法性

關於JWT的更多的信息可以從此JSON Web Token中獲取

現在就可以理解passport和jwt的關係了

passport只是一個用來驗證的庫,而jwt是一種規範。jwt並不是僅僅可以在passport中使用,jwt可以以任意一種語言來實現,如java等,可以搭配其他的nodejs庫來使用比方說everyauth。 而passport也可以搭配其它的驗證策略比方說OpenID,OAuth2等

如果你想在你的項目中使用passport和jwt的話,那就需要先導入passport庫,然後為passport增加一種基於jwt的策略。

當然這件事情已經有人做好了,passport-jwt 會減少更多的工作量。

祝你工作愉快


推薦閱讀:

「遵循XXX開源協議」這句話規定了什麼,我要把某個js工具用在項目中,我具體要做哪些事情才算遵循協議?
什麼是JS跨域訪問?
請問如果一個線程能夠非同步執行,是否是因為另一個線程幫其承擔了同步的操作?
理解 React,但不理解 Redux,該如何通俗易懂的理解 Redux?
一個 ul 里有若干 li,點擊 li 時能方便地知道這是 ul 中的第幾個 li 嗎?

TAG:JavaScript | 網路安全 | Nodejs | RESTful | Express框架 |