如何保护移动和AJAX调用的JSON RESTful API?
我正在构build一个使用node.js和express.js构build的JSON RESTful API,
API将通过客户端AJAX调用(来自Ember.js)和原生Android移动应用程序(标准HTTP请求)来访问。
我正在研究两件事情:
1)身份validation – 如何知道哪个用户正在访问的API,在开发中我使用了一个API密钥为每个用户,并将其传递到请求标头
2)安全 – 如何确保只有真正的身份validation的用户访问私人数据。
API键是本地移动客户端还是AJAX调用的好策略? (用户向API发送用户+传递并接收API密钥,然后用于创build其他请求)
我应该看看像OAUTH(1或2)? 我目前还没有第三方应用程序访问API的计划,所以我不需要授权,但这可能会在将来改变。
这是否意味着我需要拥有自己的OAUTH服务器?
您可以使用express.js会话与存储在会话存储中的会话密钥进行正常的身份validation。 为了与非cookie REST调用兼容,可以使用附加字段“mySessionId”,将其添加到查询或请求的主体中。 然后修改您的validationvalidation,以检查额外的字段。 也许一个例子会更有用:
在快递中:
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) {} } });
如果您select遵循此path,请确保在对用户进行身份validation时,还可以在会话中添加与用户相关的数据。 这会让你的生活变得更轻松。 例:
if(authenticated) { request.session.isAuth = true; request.session.customId = customId; }
有替代品,但这是我觉得最简单的。
- 多用户应用程序的Mongoose模式
- 什么是express.json()和express.urlencoded()?
- ExpressJS中的ES6类有不同的performance?
- 我如何从NodeJS / Expressnetworking应用程序运行CasperJS / PhantomJStesting?
- 使用angular色1简单与expressionjs
- NodeJS:callback和asynchronous调用
- 如何使用Mongoose,Express,Angular 4和NodeJS上传/保存和显示图片
- 如何在NodeJS / Express的页面刷新之间保持node-dbox令牌
- underscore.js with consolidate.js:如何更改templateSettings?