Tag: 基本authentication

多个Firebases实例

我尝试制作多个new Firebase(url);时遇到问题new Firebase(url); 实例。 例如: var token1 = "c.AdASdsAsds…"; var token2 = "c.dkasdEddss…"; var v1 = new Firebase('https://developer-api.nest.com'); v1.auth(token1,function(err){ console.log("Connected 1 "+err); },function(err){ console.log("Cancel 1: "+err); }); var v2 = new Firebase('https://developer-api.nest.com'); v2.auth(token2,function(err){ console.log("Connected 2 "+err); },function(err){ console.log("Cancel 2 "+err); }); 控制台日志: Connected 2 null ,这就是..没有更多。 所以,这意味着它永远不会从v1.auth();调用callback函数v1.auth(); 它忽略它,它看起来像被v2.auth();覆盖v2.auth(); 即使它们是不同的Firebases实例,并且干扰了其他一切,例如v1.child("path").on("value",function(snapshot){}); 和v2.child("path").on("value",function(snapshot){}); 在这种情况下不起作用。

SPA和SSO中无状态身份validation的性能(单点login)

如果我有一个SPA(单页应用程序 – 使用BackboneJS开发),并希望为其数据创build一个无状态的RESTful后端API。 我喜欢第三方单点login如何让用户如此轻松,因此会喜欢使用它。 但是我在这样的无状态环境中理解,每次请求都进行身份validation? 如果是这样,如果我正在使用第三方SSO,例如。 GitHub,我不需要每次都去GitHubvalidation用户身份吗? 这种情况最好的做法是什么? 我相信它是一个非常常见的用例? – 我允许用户通过Google / GitHub或其他东西login,然后从一些无状态的REST API获取数据

具有“持久性标记”function的Node.js身份validation库

我有一个节点护照的工作知识,但它没有如下的东西: 生成一个“持久性标记”(例如在authlogic / session / session.rb#L35中) 生成密码重置的易腐标记 记住我的function pipe理某些模型类的login/注销的属性等。 有没有在Node.js社区解决这个问题的库? 如果有什么像Rails的Rails那样健壮(或者说它的强大),那将是完美的,但是解决这个令牌问题的任何东西都可以起作用。 疯狂的事情是很多的例子存储在会话中的用户id ! request.session['userId'] = user.get('id') 这只是要求被黑客入侵。 它应该是这样的: require.session['persistenceToken'] = App.User.generateRandomToken()

使用Facebook和Passportjs进行身份validation:什么是accessToken,注册后应该存储什么?

我正在使用Passport来注册/使用Facebook进行身份validation。 oAuth成功的时候,我回来了: accessToken refreshToken profile 现在…当用户成功注册使用Facebook,我存储accessToken和profile信息。 当有人想要login,并再次通过oauth动作,我的应用程序再次获取accessToken和profile 。 麻烦的是, accessToken是不同的。 我真的希望accessToken是第一次validation后是相同的… 在这一点上,我连接我自己的本地用户与configuration文件中的Facebook的id字段。 但是…我怎么实际上使用accessToken? 保持它是否有意义? 如果是这样,为什么我会保留它? 我实际上期望accessToken是相同的,并使用它来匹配成功的login。 我显然不能这样做…所以我很困惑!

模型动作的Sails.jsauthentication

我正在制作一个具有不同访问级别的API,“客户端”只能读取。 但“pipe理员”必须有写权限。 在Sails.js中,每次检查不同的angular色作为策略,并在req.session中设置权限。 我只需要给“客户端”无权创build,更新和删除操作,因此我创build了一个控制器,具有这些CRUD操作,并检查用户是否有正确的angular色。 所有限制访问的操作都通过routes.jsredirect到此控制器。 现在我的问题是,当我删除一个条目,如:Category.destroy(req.param('id')); 给我没有定义,并没有完成的方法。 不像文中提到的,我通过创build这个来解决这个问题: var deleted = Category.destroy(req.param('id'), function(err, status) { if (status == 1){ res.json({message: 'Category is deleted'}); } else { res.json({message: 'Oops, something went wrong'}); } }); 但是必须有另一种方式来对这些基本操作进行身份validation。 因为现在我必须写下所有的动作。 我写的删除函数的代码有问题吗? 是否可以应用策略并redirect到默认的模型操作,就好像根本没有authentication一样?

什么authentication策略使用?

最近,我一直在阅读OAuth2,OpenID Connect等,但仍然很遗憾什么时候以及如何实现它。 我现在想使用NodeJS。 可以说我想创build一个博客服务。 该服务将公开API供客户使用。 “客户”包括pipe理员CMS。 我想这将是很好的解耦我的服务器和客户端(UI)。 我可以在不触摸服务器的情况下更改UI。 这些客户端可能会成为单页的Web应用程序。 好的第一个问题:在这个例子中,我应该使用OAuth2吗? 为什么? 仅仅因为我正在授权pipe理员应用程序访问博客? 自从SPA以来,我认为正确的策略是OAuth2 Implicit Flow? 对于每个应用程序,例如。 admin cms,我将不得不生成传递给auth服务器的AppID。 没有应用程序的秘密是正确的? 在这种情况下是否可以使用谷歌login(而不是用户名/密码)? 是否OpenID连接做到这一点? 我如何在NodeJS中实现所有这些? 我看到https://github.com/jaredhanson/oauth2orize ,但我不明白如何实现隐式stream。 我看到一个非官方的例子https://github.com/reneweb/oauth2orize_implicit_example/blob/master/app.js ,但我在想的是为什么会话需要? 我认为令牌的目标之一是服务器可以是无状态的? 我也想知道,我应该什么时候使用API​​密钥/秘密身份validation?

Nodejs / mongodb-检查用户是否具有pipe理员权限(基于令牌的身份validation)

在我的express / mongoose应用程序中,我定义了verifyOrdinaryUser函数来检查用户是否在服务器上进行身份validation。 哪个效果很好,但是我已经在下面定义了verifyAdmin函数来检查用户是否也具有pipe理权限(我使用passport-local-mongoose模块来定义用户模式)。 正如你可以看到在verifyOrdinaryUser()函数中检查用户的令牌,它会加载一个名为解码的新属性的请求对象,我试图在verifyAdmin重用,这就是当我在postman中得到以下错误。 { "message": "Cannot read property '_doc' of undefined", "error": {} } 以下是 var User = require('../models/user'); var jwt = require('jsonwebtoken'); var config = require('../config.js'); exports.getToken = function (user) { return jwt.sign(user, config.secretKey, { expiresIn: 3600 }); }; exports.verifyOrdinaryUser = function (req, res, next) { // check header or url parameters […]

NodeJS:在客户端存储JWT的地方? sessionStorage,localStorage还是cookies?

使用NodeJS和(例如)AngularJS在SPA上存储用于身份validation的JSON Web令牌的最佳位置是什么? 我到目前为止: 可能的地方: HTML5 Web存储(localStorage / sessionStorage) cookies Web存储(localStorage / sessionStorage)可以通过JavaScript访问同一个域。 这意味着您网站上运行的任何JavaScript都将有权访问Web存储,因此可能容易受到跨站点脚本(XSS)攻击的影响。 localStorage具有不同的到期时间, sessionStorage只能在创build它的窗口打开时访问。 localStorage会一直持续到您删除它或用户删除它。 Cookie与HttpOnly Cookie标志一起使用时,不能通过JavaScript访问,并且对XSS不起作用。 但是,Cookie容易受到跨站请求伪造(CSRF)的影响。 那么存储智威汤逊的最安全的方法是什么?

为什么connect-mongo为每个请求创build新的会话?

我有两个nodejs服务器(networking服务器,套接字服务器),通过socket.io互相连接。 在Web服务上,我使用express.js和passport.js作为身份validation中间件。 这是我的networking服务器configuration: var express = require('express'), mongo = require('mongodb'), io = require('socket.io'), passport = require('passport'), LocalStrategy = require('passport-local').Strategy, MongoStore = require('connect-mongo')(express); app.configure(function () { app.use(express.cookieParser()); app.use(express.methodOverride()); app.use(express.bodyParser()); app.use(express.session({ secret: 'keyboard cat', store: new MongoStore({ db: 'MyDatabase' }) })); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); app.use(express.static(__dirname + '/htdocs')); }); 当我使用connect-mongo时,它为每个http请求创build一个新的会话。 这个元素创buildlogin请求: { "_id" : "UCnXade6Bk6ofOZ+jiEgzyH8", "session" : "{\"cookie\":{\"originalMaxAge\":31536000000,\"expires\":\"2014-03-07T13:07:45.703Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"50cae08806e31ea2e5634e3f\"}}", […]

Node.js聊天 – 用户authentication

我最近build立了一个nodejs聊天服务器,聊天客户端由php服务器提供服务。 当用户login时,他们的会话将被存储在php服务器的mysql中,并且一个logincookie将被附加到浏览器。 我想限制只有login用户才能聊天的用户。 实践这个最好的做法是什么? 我很快就想到: 当聊天客户端加载时,如果用户login,我会通过套接字发送logincookie信息到nodejs verver。 然后创build一个nodejs会话。 用户聊天时,消息连同cookie信息将通过套接字发送到nodejs服务器。 如果cookie信息与nodejs会话不匹配,消息将不会被广播,客户端套接字将被丢弃。