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註冊用戶。
他們倆的作品就像一個魅力,但我面臨的一些問題:
- 當與Facebook註冊,如果用戶ID已經在數據庫中,我考慮該用戶已經訂閱了我的服務。但是我怎麼才能使用基本身份驗證來識別他呢?
第一個問題把我帶給其他人。我在任何地方都看過基本身份驗證不夠安全。所以我在想,首先,購買SSL證書,然後將我的認證系統更改爲OAuth 2.0。
我在想,如果我這樣做,我將能夠發送令牌回我的用戶登錄與Facebook,這將回答我的第一個問題。
- 但是OAuth2.0是這裏的解決方案嗎?
- 我是否正確地使用我的Facebook註冊?
- 當我想在我的Ionic應用程序上使用自己的用戶登錄時,該回調函數如何工作?
有很多事情似乎不清楚OAuth2.0,我不想開始實施它,然後弄清楚它不是我的問題的正確解決方案。我一直認爲,如果您希望其他服務使用您的服務,OAuth2.0是正確的系統選擇。我錯了?