Tag: api

正确的模块化结构nodejs +表示API的应用程序

我正在尝试使用Express 4做API的nodejs应用程序。但是当我使应用程序更加模块化时,我的路线不起作用。 有人可以解释我什么是我的错误,什么应该是API的正确的应用程序结构? 我的app.js文件(一些非英语代码被删除): var app = express(); var v1 = require('./routes/v1/index'); app.use('/api/v1', v1); app.use('/api/v2', function(req, res, next) { console.log('API Version 2'); next(); }); app.use('/api', function(req, res, next) { console.log('Request of API versions'); next(); }); 我的路线/ v1 / index.js文件: var express = require('express'); var router = express.Router(); var user = require('./user'); module.exports = router; 我的路线/ […]

在没有用户authentication的情况下保护REST API(无凭据)

我一直在挣扎2天,如何保证REST API没有用户authentication。 这是什么意思 ? 在我的AngularJS应用程序中,我通过发送一个GET请求到我必须使用的现有服务(companydomain / userinfo)来标识用户。 我不知道这是如何工作,因为我不是这段代码的作者,但重点是,我得到的响应中的用户信息作为JSON(活动目录名称,公司电话…)。 这是我必须确定一个用户。 我做了什么 现在,我发现很多资源谈论OAuth,独特的令牌等,但似乎没有什么符合我的问题。 我实现了一个令牌系统,但是由于我无法确定请求者的真实性,所以这是毫无用处的。 用户打开应用程序。 应用程序询问有关用户信息的服务。 companydomain /用户信息 应用程序根据返回的信息向服务器请求一个令牌(nodejs&express)。 / API /标记/获得/ {} USER_INFO 服务器生成一个唯一的令牌,并将其存储在内存中,有效期和拥有者。 如果用户存在(基于活动目录名称),服务器还检查表“授权用户”,如果没有添加新条目。 应用程序将每个请求的令牌发送到API。 / API /项/删除/ {} entry_id 我想你会发现这里有什么问题,攻击者可以很容易地向API发出一个损坏的请求来获取合法的令牌。 所以我的问题是: 我如何设法保护我的API,因为用户不使用凭据来validation? 我希望我的问题已经很清楚了,在这一点上,我甚至不确定如果不添加证书系统就能解决这个问题。

无法授权通过Google API node.js SDK使用现有的访问令牌

有点背景第一; 我有一个基于PHP的应用程序处理Google OAuthstream程,并将生成的访问令牌存储在数据库中。 我可以在另一个PHP脚本中使用这个访问令牌,所以我不认为这个令牌已经过期。 当我尝试在node.js脚本中使用访问令牌时,问题出现了。 我总是从Google API中获取这个错误。 {[Error:Invalid Credentials] code:undefined,errors:[{domain:'global',reason:'authError',message:'Invalid Credentials',locationType:'header',location:'Authorization'}]} 我使用的node.js代码作为参考,如下所示: var CLIENT_ID = 'CLIENT_ID'; var CLIENT_SECRET = 'CLIENT_SECRET'; var REDIRECT_URL = 'REDIRECT_URL'; var oauth2Client = new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL); oauth2Client.setCredentials({ access_token: 'ACCESS_TOKEN' }); var analytics = google.analytics('v3'); analytics.management.accounts.list({ auth : oauth2Client }, function(err, resp) { console.log(err); console.log(resp); }); 我已经尝试在testing脚本中对access_token值进行硬编码,但仍然是相同的结果。 任何build议,欢迎!

什么是防止api请求泛滥/滥用的策略?

我的服务器(节点)上有一个将新数据写入我的数据库的API。 要使用API​​,用户需要提供一个充当标识符的标记。 所以如果有人淹没我的数据库或滥用API,我可以告诉它是谁。 但是,我可以使用哪些技术来防止洪泛或挂起我的服务器的能力呢? 请注意,对API的大部分请求都是由服务器本身完成的,所以从理论上讲,我可能会从我自己的服务器地址中获得几十个请求。 我很想得到一些参考资料。 谢谢!

回环API包含筛选器不按预期工作

我使用了不同的模型来简化我想要实现的目标,并且消除混乱,虽然理论应该和我的实际项目一样。 使用以下假设:系统只能有一种扬声器和一种types的放大器。 说我有以下型号: *** System *** – id – name – speakerId – ampId *** Speaker *** – id – name *** Amp *** – id – name 我已经添加了以下到我的System.json模型文件(我认为是正确的): "relations": { "speakers": { "type": "hasOne", "model": "Speaker", "foreignKey": "speakerId" }, "amps": { "type": "hasOne", "model": "Amp", "foreignKey": "ampId" } }, 当我启动我的应用程序并打开API资源pipe理器并创build扬声器或放大器的新实例时,它期望以下内容: *** Speaker *** – […]

RESTful API是否会返回不同的状态码或令牌过期和未经授权的错误消息?

我正在开发一个使用authentication令牌的RESTful API。 工作stream程简单; 客户端执行一个/ getAuth请求,发送用户凭证,为用户返回一个令牌。 然后,用户将以下所有请求中的令牌作为标头传递给API。 经过一段时间/呼叫次数(由服务器决定)令牌到期。 当头中有一个过期令牌的请求到达服务器时,响应状态是401 Unauthorized 。 在这种情况下,用户必须使用/ getAuth 请求另一个标记 ,依此类推。 我面对的问题是,当一个请求未经授权的任何其他原因(访问未经授权的资源),该API还返回401未经授权。 此时,客户端无法知道它是否尝试访问他无法访问的内容,或者其用户令牌是否已过期。 没有任何方式知道,它会再次要求一个令牌,并重播相同的请求,从而再次得到一个401等等。 所以我的问题是: 对于过期的令牌,如果RESTful API返回一个不同的状态码或错误消息,而不是返回未经授权的请求的状态和错误,或者客户端是否应该find某种方法来pipe理它 ? 我发现客户端的解决scheme将是保存每个请求的URL,而不是重试一个请求失败与一个新的(刚收到)令牌。 但我觉得它很肮脏。

使用参数的Node.js&Express路由

我目前在node.js中有2条路由,用于我正在构build的API。 他们是: app.get('/api/v1/user/:userid', function (req, res) { return res.status(200).json(GetUser()); }); 和 app.get('/api/v1/user', function (req, res) { return res.status(400).json('UserId expected'); }); 正如你所看到的,两条路线实际上应该合为一个,例如: app.get('/api/v1/user/:userid', function (req, res) { console.log('this should still show if :userid is not populated, but it does not'); if(!req.params.userid) return res.status(400).json('UserId expected'); return res.status(200).json(GetUser()); }); 但是,当我用邮递员testing上述端点没有:userid指定,我会得到一个超时。 显然,如果我提供:userid ,我得到相应的用户。 另外我发现console.log将永远不会显示在terminal中:userid没有被指定。 这是我的terminal输出: this should still show […]

使用pipe道节点请求阻止交换机api上的504网关超时

我使用以下代码进行OpenStreetMap查询(overpass-API)。 它在较小的查询上正常工作,但在较大的查询上工作正常,大约需要10分钟,它仅生成504网关超时响应。 码: var reqStr = "http://overpass.osm.rambler.ru/cgi/interpreter?data=… console.time("query"); var stream = request(reqStr,{timeout: 3600000}).on('error', function(err) { console.log(err) }).pipe(fs.createWriteStream('resultExport.json')); stream.on('finish', function () { console.timeEnd("query"); }); 响应(resultExport.json): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>504 Gateway Time-out</title> </head><body> <h1>Gateway Time-out</h1> <p>The gateway did not receive a timely response from the upstream server or application.</p> </body></html> 查询命令有一个[timeout:3600] (秒),请求得到了{timeout:3600000} (毫秒)。 […]

API授权策略

我在节点js中有一个web应用程序,它会消耗一些API,例如新闻等网站内容的某些方面。 API是用node.js编写的,指向一个mongodb数据库。 对于这种types的需求的最佳授权策略,我希望得到一些build议。 我真的不需要用户名和密码解决scheme(我不认为)。 Web应用程序可以传递给API的某种静态令牌,以便只有拥有此令牌的应用程序才能浏览由API返回的数据。 我主要是想停止使用API​​的旧应用程序。

如何在快递服务器内部进行外部API调用?

你好我一直试图在我的仪表板上实现OneSignal API,我不知道是否有可能在快速服务器内部进行API外部调用。 这里是一个例子: var sendNotification = function(data) { var headers = { "Content-Type": "application/json; charset=utf-8", "Authorization": "Basic NGEwMGZmMjItY2NkNy0xMWUzLTk5ZDUtMDAwYzI5NDBlNjJj" }; var options = { host: "onesignal.com", port: 443, path: "/api/v1/notifications", method: "POST", headers: headers }; var https = require('https'); var req = https.request(options, function(res) { res.on('data', function(data) { console.log("Response:"); console.log(JSON.parse(data)); }); }); req.on('error', function(e) { console.log("ERROR:"); […]