【发布时间】:2017-03-28 21:21:06
【问题描述】:
我目前正在使用 NodeJS 和 Express 为使用 Ionic 框架编写的移动应用程序开发 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中获取我的用户对象。我的数据库中有一个字段是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 是选择的正确系统。我错了吗?
【问题讨论】:
标签: node.js facebook rest api oauth-2.0