Tag: 基本authentication

我应该如何存储由RESTful API生成的令牌?

我已经构build了一个API来为login的用户生成身份validation令牌。此时,我还有一个用Node.JS编写的客户端应用程序。 当我使用用户证书从客户端应用程序向API发出请求时,我得到身份validation令牌:我应该如何将其存储在客户端应用程序中? 我不应该每次我想要API的请求时要求一个令牌,对吗? 我想把这个标记放入Cookie中,但我认为这不是最好的解决scheme。 你会推荐什么?

Node.js无状态/无Cookie会话API身份validation

我正在build立一个API,并试图找出许多上下文中的身份validation。 会话和密码validation API需要为我们创build和部署的客户端应用程序提供服务,并使用密码处理已authentication的请求。 发送每个请求的密码并不是一个好主意,因此首先点击login端点并获取会话ID会更有意义。 有问题的Web应用程序是用AngularJS编写的,并且应该在localStorage中跟踪自己的会话,以减轻会话劫持,并消除对cookie的依赖,以跟踪会话。 Web应用程序需要发送每个请求的会话标识符,目前在请求的主体中这样做。 这个碎片非常容易,并与API紧密结合。 我宁愿传递所有的身份validation信息,通过一个头,最好 – 而不是通过请求体,url和头部传播的许多不同的领域。 会话存储 当然, Redis真棒。 会话存储很简单,并自动垃圾收集。 不幸的是,redis中的会话难以pipe理:我不能轻易撤销给定用户的所有会话。 通过将会话存储在真正的redis-datastructure而不是全局密钥空间来添加该function,可以删除添加键控TTL的function。 我目前的解决scheme是在MongoDB用户集合中存储会话列表,并在会话活动(例如login/注销)上垃圾收集过期的会话。 会话使用connect-redis模块存储在redis中,但是随每个请求发送的会话都不包含在cookie中。 目前,我有一小块中间件,它将会话标识符从请求体中取出并放入一个req.cookies对象中。 var express = require('express'); var RedisStore = require('connect-redis')(require('connect')); var app = express(); app.use(function(req, res, next) { req.cookies = {session: req.body.session}; }); app.use(express.session({ store: new RedisStore({ client: redisClient, prefix: 'session:' }), key: 'session', secret: 'all mine' }); […]

Passport.js + Express.jsauthentication后将用户转发到原来的目的地

我有一个应用程序,是在服务器上的Node + Express + Passport和客户端上的jQuery + Backbone.js。 客户端使用URL中的哈希标签,但对于某些function来说,重要的是用户login。 我希望应用可以通过URL访问,例如http://mydomain.com/app#cone/waffle/flavor/mint/toppings/sprinkles ,以便: 如果用户已经login,他们直接去请求的URL没有麻烦 如果用户还没有login,他们去/login ,然后去请求的URL 在这个SOpost之后, 在Node.js Passport的Google策略上自定义returnUrl ,我已经这么做了 如果他们已经login,他们直接去URL,哈希标签和所有 如果他们没有logging,它会把他们带到login页面,然后到请求的url,但… 它似乎从login后redirect的原始url中去掉散列参数。 有没有办法保存哈希参数时redirect到原来的目的地? 从这篇文章, 从请求url获取散列参数我得到的想法是散列标签不可用在服务器上,这是使用散列标签的整个点。 所以我怀疑这是不可能的。 也许caching在本地参数不知何故,检索他们redirect,说[original URL minus hastags] + #use-cached-params ?

Meteor中服务器端路由的authentication

什么是最好的方式(最安全和最简单)来validation服务器端路由的用户? 软件/版本 我正在使用最新的铁路路由器1. *和meteor1. *开始,我只是使用帐户密码。 参考代码 我有一个简单的服务器端路由,呈现一个pdf到屏幕上: 两者/ routes.js Router.route('/pdf-server', function() { var filePath = process.env.PWD + "/server/.files/users/test.pdf"; console.log(filePath); var fs = Npm.require('fs'); var data = fs.readFileSync(filePath); this.response.write(data); this.response.end(); }, {where: 'server'}); 作为一个例子,我想做一些接近这个SO回答build议的东西 : 在服务器上: var Secrets = new Meteor.Collection("secrets"); Meteor.methods({ getSecretKey: function () { if (!this.userId) // check if the user has privileges throw […]

在callback函数中,Passport-Facebook访问req对象

在Facebook上为nodejs护照authenticationcallback,你如何获得callback中的req对象? passport.use(new FacebookStrategy({ clientID: 123456789, clientSecret: 'SECRET', callbackURL: "http://example.com/login/facebook/callback" }, function(accessToken, refreshToken, profile, done){ // Is there any way to get the req object in here? } ));

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

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

什么是更好的方式来validationExpress 4路由器上的一些路由?

我正在使用Express 4,我有一个由passport.js保护的路由,如下所示: var media = require('express').Router(); media.get('/', function(req, res) { // provide results from db }); media.post('/', passport.authenticate('bearer'), function(req, res) { // This route is auth protected }); 所以 – 收集路线应该(大部分)不应该保护我,并创build/更新路线应该。 但是这需要我把护照传给我所有的路由文件(到目前为止我已经有7个了),然后把它作为一个中间件添加到其中的一些文件中。 我喜欢这个版本,你可以这样做: var router = require('./my-router'); app.use('/api/route', passport.authenticate('bearer')); app.use('/api/route', router); 但是,这需要我的所有路线授权。 有没有更好的方法来通过护照一路?

使用快递服务静态文件时,不能使用基本身份validation

使用Node.js的Express框架,我试图提供包含在一个目录中的静态文件,同时也把基本的身份validation。 当我这样做时,我被提示input用户名和密码(如预期的那样),但是在我正确地input它们之后,我得到了一个404。如果我删除身份validation检查并提供相同的目录,我实际上得到页面包含在其中。 这是一个我作为一个概念validation的快速服务器: var express = require('express'); var app = express(); var auth = express.basicAuth(function(user,pass) { return 'user' === user && 'pass' === pass; }); app.use('/admin', auth, express.static(__dirname + '/admin')); app.use('/adminNoAuth', express.static(__dirname + '/admin')); app.listen(8082); 当我打localhost:8082/admin我得到的用户名/密码,然后404。当我打localhost:8082/adminNoAuth它提供了页面。 我正在使用Express 3.4.7和node.js 0.10.22。

PHP + socket.io(会话,授权和安全问题)

我有一个工作的PHP应用程序,我想添加实时支持。 我想使用nodejs / socket.io来添加这种function。 我发现的第一个问题是如何在nodejs端正确授权用户(用户已通过PHP会话在php后端进行身份validation)。 在nodejs端使用socket.handshake.header.cookie我可以parsing和获取PHP会话ID,我可以通过redis / memcache / database(取决于我用来保存会话信息)进行身份validation。 当用户只有一个网站的标签页/窗口打开时,一切看起来很酷 – 当有更多的使用session_regenerate_id() ,在nodejs用户authentication与另一个sessionid键,所以我不能区分两个标签除了他们连接的套接字ID用。 当用户注销时,他不应该在任何选项卡上收到任何消息(因为他已经从该浏览器的每个选项卡/窗口注销)。 所以在注销消息(从浏览器刚刚注销PHP的事情发送),我应该删除所有连接到授权用户ID的套接字连接。 但是,如果用户login在两个设备上(如电脑浏览器和iPad游戏)。 在注销一个设备后,他不应该在他注销的设备上收到任何消息,而不是在每个设备上。 如何区分socket.io中不同设备/浏览器的连接? 当然,不使用session_regenerate_id()会很有效,但是如果我真的想要使用这个function,我该怎么办? 我的另一个问题是安全问题(甚至是问题)。 我们假设应用程序中的授权用户可以看到example.com/user1页面(这是user1的新闻提要),并且看不到example.com/user2 (他没有看到它的权限)。 当用户在example.com/user1上时 ,我想让socket.io向浏览器发送更新消息,当用户在example.com/user2上时 ,当然不会发送更新消息。 在socket.io端我可以读取引用地址(据推测,当用户在user2网站上,他没有得到任何socket.io连接)。 问题是: 我应该比较referer地址与node.js端的身份validation用户的权限? 或者也许引用值在node.js方面是安全的? 在node.js端添加另一个数据库检查会降低速度(因为几乎所有的请求都应该在两边同时进行数据库检查 – PHP和node.js)。 或者,也许整个概念的socket.io + PHP应用程序工作我提出的方式是错误的? UPDATE 我想我find了一个方法来省略第一个问题的问题 – 基本上我只是添加另一个cookie(除了PHPSESSID)fe。 命名为NODESESSID,我在用户授权时生成(使用uniqid())。 现在在node.js端的授权是比较PHPSESSID和NODESESSID(都必须匹配)。 现在,当用户注销时,他将消息注销传递给socket.io,而socket.io将使用NODESESSID断开所有的套接字。 这就像连接重新生成会话ID的好处,而不是重新生成会话ID(但不容易受到会话固定,不是吗?)。

用户帐户激活,电子邮件确认和Passport / Node.Js邀请

我想为在Passport / Neo4J上运行的用户authentication系统设置三件事情: 1)手动用户帐户激活(以便pipe理员); 2)只邀请帐户的创build; 3)激活之前的电子邮件确认帐户; 我想知道是否你知道任何易于使用的Passport插件(我还没有find自己的,但也想要你的build议),也是 – 实现它的最好方法是什么(也许你已经完成/看到它,所以你可以分享代码?) 谢谢!