2016-11-15 44 views
0

我目前正在爲使用Ionic框架編寫的移動應用程序開發具有NodeJS和Express的REST API。澄清有關OAuth2.0和Node.JS REST API的一些問題

我有一個mysql數據庫存儲我的用戶。

我希望我的API在我的用戶身份驗證以及他們訪問API的某些路由和資源的權利方面是安全的。

我的用戶可以登錄/註冊自己的憑據或使用Facebook來做到這一點。


所以,這就是我現在在做:

  • 使用我的API的路線之一的用戶寄存器
  • 當他想要訪問受保護的途徑,我使用passport- http的基本認證基本策略

我用這樣的:

router.route('/protected/route') 
    .put(auth.isAuthenticated, controller.someMethod); 

的auth.isAuthenticated看起來是這樣的:

passport.use(new BasicStrategy(
    function(username, password, callback) { 
    Account.findByEmailAndPassword(username, password, function(err, user) { 
     if (err) { callback(err) }; 
     if (!user) { return callback(null, false); } 
     return callback(null, user); 
    }); 
    } 
)); 

exports.isAuthenticated = passport.authenticate('basic', { session : false }); 
  • 然後,在controller.someMethod(),讓我的用戶對象req.user。我有一個外地在我的DB是type,我可以檢查什麼是用戶的類型,然後繼續我的請求。

現在,使用Facebook的:

  • 客戶端使用Facebook的登錄按鈕,授權我的應用程序來訪問它的數據,然後得到一個的access_token。它通過HTTP請求發送給我的API。
  • API獲取令牌,然後開始調用Facebook Graph API來詢問有關用戶的信息,例如他的ID,電子郵件,名字和姓氏。
    • 我把這些信息發回客戶端。如果他願意,他可以修改他的名字和姓氏。然後將其發送回API。
    • 該API註冊用戶。

他們倆的作品就像一個魅力,但我面臨的一些問題:

  1. 當與Facebook註冊,如果用戶ID已經在數據庫中,我考慮該用戶已經訂閱了我的服務。但是我怎麼才能使用基本身份驗證來識別他呢?

第一個問題把我帶給其他人。我在任何地方都看過基本身份驗證不夠安全。所以我在想,首先,購買SSL證書,然後將我的認證系統更改爲OAuth 2.0。

我在想,如果我這樣做,我將能夠發送令牌回我的用戶登錄與Facebook,這將回答我的第一個問題。

  1. 但是OAuth2.0是這裏的解決方案嗎?
  2. 我是否正確地使用我的Facebook註冊?
  3. 當我想在我的Ionic應用程序上使用自己的用戶登錄時,該回調函數如何工作?

有很多事情似乎不清楚OAuth2.0,我不想開始實施它,然後弄清楚它不是我的問題的正確解決方案。我一直認爲,如果您希望其他服務使用您的服務,OAuth2.0是正確的系統選擇。我錯了?

回答