Articles of restful authentication

如何使用supertest和代理在摩卡testing中进行authentication请求?

我在login后无法运行已validation的testing(服务器返回401 Unauthenticated )。 var should = require('should'), _ = require('lodash'), app = require('../../../server'), mongoose = require('mongoose'), User = mongoose.model('User'), request = require('supertest'); var user , user1; describe('GET /api/jobs', function () { before(function (done) { user = new User({ provider: 'local', name: 'Fake User', email: 'test@test.com', password: 'password' }); // Clear users before testing User.remove().exec(); request(app) […]

为restify.js实现基于令牌的身份validation的最佳方式是什么?

我正在尝试使用restify.js构build一个RESTful API,但我不想将API暴露给所有人。 我将使用基于令牌的身份validation。 我脑海中的过程就是这样,我不确定这是否合理。 用户发送用户名/密码到一个API来获取令牌。 这个令牌应该包含在每个其他API调用的请求中。 如果这是合理的,是否有任何node.js库我可以使用? 另外,我如何保护令牌? 如果有人用令牌拦截了一个http请求,那么这个人将得到api URL和令牌。 然后他可以根据需要发送请求。 有没有办法避免这种情况? 非常感谢!

如何在JWT中使用jti声明

JWT规范提到了一个jti声明,据称这个声明可以作为随机数来防止重播攻击: JTI(JWT ID)声明为JWT提供了一个唯一的标识符。 标识符值必须以确保相同值被偶然分配给不同数据对象的可能性可以忽略的方式分配; 如果应用程序使用多个发行者,则必须防止不同发行者产生的值之间的冲突。 jti声明可用于防止重播JWT。 jti值是区分大小写的string。 使用这个声明是可选的。 我的问题是如何去执行这个? 我是否需要存储以前使用的jtis,并在每次请求时发布新的JWT? 如果是这样,这是否不符合智威汤逊的目的? 为什么使用JWT而不是将随机生成的会话ID存储在数据库中? 我的REST API有一个mongo数据库,我不反对增加一个redis实例。 有比JWT更好的身份validation选项吗? 我主要是不想在客户端存储消除HTTPauthentication的密码作为一个选项,但是,当我深入到这个JWT的东西,我开始感觉,如果自定义令牌实施或不同的标准可能会更好满足我的需求。 是否有任何节点/快递包基于令牌的authentication,支持令牌吊销和旋转令牌? 将不胜感激任何意见。

基于NodeJS的HTTP客户端:如何validation请求?

这是我必须做一个简单的GET请求的代码: var options = { host: 'localhost', port: 8000, path: '/restricted' }; request = http.get(options, function(res){ var body = ""; res.on('data', function(data) { body += data; }); res.on('end', function() { console.log(body); }) res.on('error', function(e) { console.log("Got error: " + e.message); }); }); 但是“/ restricted”这个path需要一个简单的基本HTTPauthentication。 我如何添加凭据进行身份validation? 在NodeJS手册中,我找不到与基本httpauthentication相关的任何东西。 提前致谢。

passport.js passport.initialize()中间件未被使用

我正在使用express + mongoose的节点,并尝试使用passport.js和restful api。 validation成功后,我一直收到这个exception(我在浏览器上看到了callbackurl): /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/utils.js:419 throw err; ^ Error: passport.initialize() middleware not in use at IncomingMessage.req.login.req.logIn (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/http/request.js:30:30) at Context.module.exports.delegate.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/middleware/authenticate.js:194:13) at Context.actions.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/context/http/actions.js:21:25) at verified (/Users/naorye/dev/naorye/myproj/node_modules/passport-facebook/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:133:18) at Promise.module.exports.passport.use.GitHubStrategy.clientID (/Users/naorye/dev/naorye/myproj/config/passport.js:91:24) at Promise.onResolve (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8) at Promise.EventEmitter.emit (events.js:96:17) at Promise.emit (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38) at Promise.fulfill (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20) at /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/query.js:1822:13 我读过,我应该把app.use(passport.initialize()); 和app.use(passport.session()); 在app.use(app.router);之前app.use(app.router); 这就是我所做的。 这是我的express.js注册中间件: var express = require('express'), mongoStore = […]

保护我的Node.js应用程序的REST API?

我可以在我的REST API上做一些帮助。 我正在写一个Node.js应用程序,它使用Express,MongoDB,并在客户端有Backbone.js。 我花了最后两天试图解决所有这些,没有太多的运气。 我已经检查过 保护REST API 使用OAuth保护我的REST API,同时仍允许通过第三方OAuth提供者进行身份validation(使用DotNetOpenAuth) http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ http://tesoriere.com/2011/10/10/node.js-getting-oauth-up-and-working-using-express.js-and-railway.js/ 我想保持我的后端和前端尽可能分开,所以我想使用精心devise的REST API会很好。 我的想法是,如果我花时间去开发一个iPhone应用程序(或类似的东西),它可以使用API​​来访问数据。 但是,我希望这是安全的。 用户已经login到我的networking应用程序,我想确保我的API是安全的。 我读了关于OAuth,OAuth 2.0,OpenID,Hmac,哈希等…我想避免使用外部login(Facebook / Twitter /等)我想注册和login在我的应用程序/服务器。 …但我仍然在这里困惑。 也许是在深夜,或者我的大脑只是被炸,但我真的可以采取一些措施,在这里做什么。 我有什么步骤来创build一个安全的API? 任何帮助,任何信息,任何示例,步骤或任何东西都会很棒。 请帮忙!

AngularJSauthentication+ RESTful API

用于validation/(重新)路由的angular度+ RESTful客户端通信(带有API) 这已经在几个不同的问题和几个不同的教程中有所涉及,但是我所遇到的所有以前的资源并不完全相同。 在一个坚果壳里,我需要 通过POST从http://client.foologin到http://api.foo/login 为提供logout路由的用户提供“login”GUI /组件状态 当用户注销/注销时,能够“更新”用户界面。 这是最令人沮丧的 保护我的路线,以检查身份validation状态(他们是否需要它),并相应地将用户redirect到login页面 我的问题是 每当我导航到一个不同的页面,我需要打电话给api.foo/status以确定用户是否login。(ATM我使用快递的路线)这会导致一个呃,Angular确定的东西ng-show="user.is_authenticated" 当我成功login/注销时,我需要刷新页面(我不想这样做),以填充{{user.first_name}}类的东西,或者在注销的情况下,清空该值出。 // Sample response from `/status` if successful { customer: {…}, is_authenticated: true, authentication_timeout: 1376959033, … } 我试过了 http://witoldsz.github.io/angular-http-auth/ 1 http://www.frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/ 2 https://github.com/mgonto/restangular (对于我的生活,我无法弄清楚如何使用post data POST ,而不是query params 。文档在这个问题上什么也没有。 为什么我觉得我正在失去理智 似乎每个教程都依赖于一些数据库(大量Mongo,Couch,PHP + MySQL,无限广告)解决scheme,而且没有一个纯粹依靠与RESTful API进行通信来保持login状态。 一旦login,更多的POST / GET与withCredentials:true一起发送withCredentials:true ,所以这不是问题 我找不到任何做Angular + REST + Auth的例子/教程/回购,没有后端语言。 […]