2013-03-18 71 views
7

我有幾個問題:node.js的REST API認證的oauth2

1)這是一個好的做法是使用REST API都爲外部API的使用和服務器端的骨架(或純JS)前端? 我認爲編寫一個REST API服務器並將其用作後端要容易得多。

2)如果我用oauth 2編寫webapp認證標準是將我的祕密標記存儲在cookie中的一種好方法?我認爲這會導致CSRF漏洞。

正如我所看到passport.js使用cookie來存儲例如Facebook或Twitter的祕密令牌...... 在這種情況下,CSRF如何?

回答

11

這是一個非常有趣的問題,我很驚訝沒人回答。

1)第一個問題,我的答案肯定是!你不想寫2次API邏輯。

你可以做的是使用不同的URL。

例如,對於公共API,你使用http://api.domain.com/objects/而關於內部的,你可以使用http://domain.com/api/objects/或任何你喜歡的。

然後您使用相同的邏輯,但採用不同的身份驗證策略。像許多流行的API(Twitter,Facebook等)一樣使用身份驗證令牌公開,使用passport.js的日誌私有API。

好事關於分離是:

  • 你分開的安全問題
  • 您可以控制接入帶寬,如果你的應用程序傳輸大量的數據(你想要的應用程序給予更高的優先級給你。 ..以及可能!)
  • 或者乾脆就可以控制權限(如無通過公開API DELETE)

2)我不是一個安全專家,但我肯定會信任護照。 js認證系統,因爲它在將節點用作後端時被廣泛使用。

您可以參考這個問題在快遞實施CSRF安全:How to implement CSRF protection in Ajax calls using express.js (looking for complete example)?

或者另一種策略是,如果你使用FB或Twitter連接策略使用刷新令牌。

希望它有幫助。