2012-12-13 75 views
5

我正在構建一個使用node.js和express.js構建的JSON RESTful API,其中包括由客戶端AJAX調用(來自Ember.js)和原生Android移動應用程序(標準HTTP請求)。如何爲移動和AJAX調用保護JSON RESTful API?

我尋找到了兩兩件事:

1)認證 - 如何知道哪些用戶正在訪問的API, 在發展中,我用於每個用戶的API密鑰和請求頭中傳遞它

2)安全 - 如何確保只有真正認證的用戶訪問私人數據。

是API鍵是本地移動客戶端還是AJAX調用的好策略? (用戶向API發送用戶+密碼並接收API密鑰,然後用於創建其他請求)

我應該看看類似OAUTH(1或2)的內容嗎?我目前沒有第三方應用程序訪問API的計劃,所以我不需要授權,但這可能會在將來發生變化。

這是否意味着我需要擁有自己的OAUTH提供者服務器?

+0

OAuth對於您的問題來說是一個很好的現有和通用的解決方案,它也解決了一些可能的未來問題。你有沒有理由不使用它? – mtsr

+0

我對OAuth沒有任何經驗,因此我首先詢問了策略。我是否需要運行自己的OAuth提供商服務器? –

+0

你現在有答案嗎?我有同樣的謎題。 –

回答

0

您可以使用express.js會話對存儲在會話存儲中的會話密鑰進行正常驗證。爲了與非Cookie REST調用兼容,您可以使用附加字段「mySessionId」添加到查詢或請求的正文中。然後修改您的驗證驗證以檢查該額外字段。 也許一個例子是比較有用:

在快遞:

var server = express.createServer(); 
server.use(express.cookieParser()); 
server.use(express.session(sessionInfoObject)); 
server.get("/path/to/endpoint", function(request, response) { 
    if(typeof(request.query.mySessionId) != "undefined") { 
     // authenticate with the session id in mySessionId 
     // eg: if (getSession(request.query.mySessionId).isAuth) {} 
    } 
    else { 
     // session authentication, use request.session 
     // eg: if (getSession(request.query.mySessionId).isAuth) {} 
    } 
}); 

如果你選擇走這條路,確保當您驗證用戶,你也是在添加用戶相關的數據會話。它會讓你的生活變得更輕鬆。例如:

if(authenticated) { 
    request.session.isAuth = true; 
    request.session.customId = customId; 
} 

有替代品,但這是我覺得最簡單的。