2013-07-01 150 views
65

我正在編寫一個nodejs應用程序,我想將它用作Web應用程序以及API提供程序。一旦用戶通過身份驗證,我想爲該用戶分配一個令牌用於後續請求。這對Web應用程序的通行證非常有效,因爲我只是使用會話中的令牌對用戶進行序列化和反序列化。但是,在響應API請求時,沒有設置用於存儲會話信息的Cookie。理想情況下,護照會在會話和請求主體中查找令牌。有什麼辦法可以配置護照來完成這個任務嗎?nodejs護照身份驗證令牌

回答

124

只需在每個請求上使用訪問令牌。不需要使用會話。以下是工作流程:

POST /signin 
  1. 的用戶名和密碼張貼在客戶端請求。
  2. 服務器通過使用護照的本地策略對用戶進行身份驗證。見passport-local
  3. 如果憑證代表有效用戶,則服務器將返回由某個生成器生成的訪問令牌。 node-jwt-simple是個不錯的選擇。
  4. 如果憑據無效,請重定向到/signin

當客戶端從授權服務器接收到訪問令牌時,它可以向服務器上的受保護資源發出請求。例如:

GET /api/v1/somefunction?token='abcedf'

  1. 客戶端調用與令牌參數一些服務器API。
  2. 服務器通過使用護照的載體策略來驗證令牌。見passport-http-bearer

參考

Make a secure oauth API with passport.js and express.js (node.js)

+1

謝謝SOOOOO多本。出於某種原因,我認爲OAuth需要比這更復雜。 – SomethingOn

+1

很好的解釋 – Omar

+1

關於令牌生成,有一個永不過期的令牌是安全的嗎?我必須讓令牌過期並生成新的嗎? – sanfilippopablo

7

由於bnuhero提到你不需要會話(雖然這方法有其優點也是如此)。這是我開始的一個鍋爐板項目: https://github.com/roblevintennis/passport-api-tokens

這裏是一個替代和容易遵循tut(但它會使用會話)。可能是一個很好的交叉引用: http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local

還有一參考相關: http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/