5

我正在构建一个使用 node.js 和 express.js 构建的 JSON RESTful API,

API 将被客户端 AJAX 调用(来自 Ember.js)和原生 Android 移动应用程序(标准 HTTP 请求)访问。

我正在研究两件事:

1) 身份验证 - 如何知道哪个用户正在访问 API,在开发中我为每个用户使用了一个 API 密钥并在请求标头中传递了它

2) 安全性——如何确保只有真正经过身份验证的用户才能访问私人数据。

API 密钥对于本地移动客户端和 AJAX 调用都是一个好的策略吗?(用户将 user+pass 发送到 API 并接收 API 密钥,然后用于创建其他请求)

我应该看类似 OAUTH (1 or 2) 的东西吗?我目前没有计划让 3rd 方应用程序访问 API,因此我不需要授权,但这可能会在未来发生变化。

这是否意味着我需要拥有自己的 OAUTH 提供商服务器?

4

1 回答 1

0

您可以使用 express.js 会话进行常规身份验证,并使用存储在会话存储中的会话密钥。为了与非 cookie REST 调用兼容,您可以使用添加到查询或请求正文的附加字段“mySessionId”。然后修改您的身份验证以检查该额外字段。也许一个例子会更有用:

快递:

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) {}
    }
});

如果您选择走这条路,请确保在对用户进行身份验证时,您还会在会话中添加与用户相关的数据。它会让你的生活轻松很多。例子:

if(authenticated) {
    request.session.isAuth = true;
    request.session.customId = customId;
}

有其他选择,但这是我觉得最简单的一个。

于 2012-12-18T12:47:36.570 回答