如何保护移动和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; } 

有替代品,但这是我觉得最简单的。