Tag: cookie

基于令牌的身份validation和浏览器上的会话/本地存储

好吧,我想实现一个networking应用程序,使用身份validation机制来个性化网站上的用户体验,但同时我有一些问题,我想清除。 因此,一开始,用户将以他们的用户名和密码login(现在让我们忘记第三方authentication,并假设有一个适当的注册页面),并成功login后,服务器将生成一个令牌,用于从该特定用户的浏览器。 接下来,我正试图validation我的理解并提出相关的问题。 据我所知,在服务器端使用令牌的速度要快得多(如果你愿意的话,cpu密集程度要低一些),因为现在不需要解密存储在服务器上的密码,并将其与使用请求(例如使用bcrypt ),但相反,检查要简单得多,归结为令牌是否过期。 作为额外的好处,用户名和密码的敏感信息不会重复传输。 检查点1.我们希望应用程序在用户自愿或不小心按下“刷新/重新加载”时强健,这样令牌在刷新后仍然可以使用(而不必再用凭证login)。 现在很清楚,要么我们必须使用cookie(即会话),要么在客户端使用会话存储或本地存储。 有另一种方法吗? 据我所知,答案是否定的(是的,本地存储有不同的select,如Web存储,Web SQL数据库,索引数据库和文件访问,但这是超出了问题)。 这是对还是错? 而且,在客户端处理令牌(存储/调用)最常用的做法是什么? 检查点2.令牌到期。 据我所知,这个想法是,每次使用有效的令牌时,该特定令牌的到期时间被更新(例如7或10天后)。 这对于定期访问该站点的用户仅需要login一次就具有很好的好处。 但是,不利之处似乎在于,对于相同的用户,令牌保持不变 – 可能永远不变(除非令牌过期)。 那么问题是,这是安全的吗? 这里的另一个想法是更新后端的令牌,在客户端发送更新的令牌,更新浏览器的本地存储器上的令牌,而对最终用户而言,所有内容都是透明的。 这是常见的做法吗? 我可以看到,现在在服务器端,需要对生成的令牌保持谨慎(请参阅下面的场景)。 是否有共同的做法来处理这个(如果需要处理的话)? (假设用户A有两台设备A1和A2,使用令牌TA1,从现在开始7天到期,用户B有设备B1使用令牌TB1,从现在起7天后到期,所有的令牌都存储在某种本地存储器中。六天后(即实际到期前一天),当用户A正在使用设备A1时,TA1更新为TA2,同样在当天,TB1更新为TA1,现在如果用户A使用设备A2,令牌(TA1),但在使用API​​时将以用户B身份进行身份validation!) 检查点3.我一直认为基于令牌的authentication就是这样。 通过http请求的头部发送一个令牌,这就是全部。 显然,如果你也发送用户名,那么我们就避免发送密码,而且我们也避免了上述的问题。 不过,这种方法我不太喜欢。 毕竟,现在令牌作为一个密码。 唯一的节省是在服务器端匹配证书时的解密(即cpu-cycles)。 这种方法是废话还是什么? 检查点4.如果将来想创build智能手机或平板电脑的专用应用程序,则在请求的标题上使用标记(应该是非常容易),而不是依赖于Cookie和会话(请参阅cookie容器) 。 目前这对我来说很小,但这是真的吗? 我认为上面的问题是实现不可知的,但是如果你想给开发指针,我将使用node.js。

会话Cookie仅用于特定路由

我正在使用Connect.js和连接会话模块来pipe理会话cookie。 我注意到Connect在除静态文件之外的所有路由上都设置了会话cookie。 问题是我发送之前处理一些静态文件,如JS和CSS文件,所以我不能使用Connect的内置静态服务器,这意味着连接会话为这些文件设置会话Cookie。 由于这些文件将被包含在外部网站上,我不希望他们发送cookie。 是否有可能只为特定的路线设置会话cookie?

如何销毁客户端会话中的会话

如果我在NodeJS中使用客户端会话,并希望完全删除会话,我该如何去做呢? 看起来,调用reset()只是清除会话内容,有效地发出一个新的会话,并更新新的,延长到期的cookie。 在这种情况下,我希望在某些情况下完全删除会话cookie(注销等)。 有没有人有任何提示如何做到这一点?

connect.session的秘密和connect.cookieParser的区别?

我想使用连接模块connect.session和connect.cookieParser在我的Express应用程序中使用安全的cookie。 根据文档,都接受一个secret参数。 该密钥用于防止用户篡改cookie。 我应该将相同的密钥设置到两个模块还是两个不同的模块? 或者我应该只通过一个关键到其中之一?

为什么socket.io使用不同的path创build第二个“sid”cookie?

我正在拉起一个项目,我发誓这不是一个问题以前,但显然不是现在 – 我可能做一些愚蠢的事情。 我看到express&socket.io创build了两个不同的“sid”cookie,一个是“/”path,另一个是“/socket.io”path。 我期望的行为是分享我的快递应用程序和套接字之间相同的cookie /会话。 “/”的“sid”cookie: “/ socket.io”的“sid”cookie: 我正在通过以下方式设置快递: var config = require('config'); var express = require('express'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var sessionStore = require('./session-store'); var sessionConfig = { store : sessionStore, secret : config.server.sessionSecret, key : config.server.sessionKey, saveUninitialized : true, resave : true, cookie : { secure: config.server.useHTTPS } […]

手动创build已login用户的护照会话

我正在使用护照js进行login注册。 一旦有新用户login,就会在包含数据库唯一密钥的浏览器上创build(由我自定义)cookie。 所以程序如何工作是: 如果一个新的人login一个cookie是由这个函数创build的 function setCookie(cname,cvalue,exdays) { //alert("Cookie set on tedJavascript"); var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+d.toUTCString(); document.cookie = cname + "=" + cvalue + "; " + expires; } 那么在login页面上input的详细信息将被发送到服务器上的发布function(护照js)。 本地策略authentication码如下(guest,fb等同) passport.use('guest',new LocalStrategy( function(username,password,done){ User.getUserBycookie(password, function(err, user){ if(err) throw err; //if cookie present (checked in terms of password) […]

如何在Express.js中使用cookie实现“login记住我”?

我感到很困惑,不明白res.cookie和req.cookies有什么区别。 更奇怪的是,我发现如果我不设置一个cookie: //The value will be: req.cookies.uid=="undefined" //instead of: req.cookies.uid==undefined 为什么express.js像这样devisecookie? 如果我想实现一个“记住我”function,而用户试图login和设置cookie过期时间无限或可能一年,我应该如何正确使用cookie? 我发现cookieParser只支持这样的事情: express.cookieParser("secret") 并且不支持过期/最大年龄设置。

如何在Express / Node.js中dynamic设置会话cookie的expires / maxAge?

我试图为我的login表单实现“记住我”function。 大多数网站如何做到这一点? 我假设当checkbox被选中时,大多数网站会dynamic改变会话cookie的过期或最大年龄字段。 那么,如何根据是否选中记住我checkbox来更改Cookie应该dynamic保存多久? 到目前为止我有: if (req.body.remember) { var thirtyDays = 30*24*60*60*1000; req.session.cookie.expires = new Date(Date.now() + thirtyDays); req.session.cookie.maxAge = thirtyDays; } else { req.session.cookie.expires = false; req.session.cookie.maxAge = false; } console.log(req.session.cookie.expires, req.session.cookie.maxAge) 这工作。 但我不能select不记得我; 由于某种原因,cookie永远持续下去。 即使我删除了cookie(在chrome中)并且login时没有记住我的字段,但是当我closures浏览器的会话时,即使它在web检查器的cookie面板中显示它是Session和console.log,我“假,假”。 我显然做错了什么。 我该怎么做对不对? 提前致谢! 🙂 编辑 看起来像上面的代码正在工作,实际上。 之所以出现好像没有工作的原因是因为我有重新启动Chrome时重新打开浏览器标签的选项。 这导致Chrome永远不会删除浏览器会话cookie,并且让我觉得将cookie的过期设置为false并不会让他们成为浏览器会话cookie。

validationJson Web令牌并在login后redirect

我最近读了Angularjs的Cookies和Tokens ,并实现了login和身份validation部分,以允许用户从login页面login。 该应用程序设置为将账户模块(负责login,账户注册,个人资料等)作为单独的页面,将redirect到主应用程序的SPA。 成功login后,令牌作为JWT发送回login页面客户端,并通过js设置sessionStorage / localStorage值。 最后用户被redirect到(也通过js)到主应用程序。 这个问题是因为我通过jsredirect无法设置头,这显然在加载页面时主应用程序中的身份validation失败(因为我的身份validation中间件比静态和身份validationAPI要求都高)。 如果我尝试在表单发布之后从服务器redirect,而不是在成功时通过JSON返回标记,那么sessionStorage将不会按照博客文章中的描述通过js进行设置。 我已经提出了一些想法,并希望得到有关如果哪一个对最佳实践都有好处的意见。 从服务器设置一个响应authenticationcookie'只有'(我们所有的浏览器要求允许这个)cookie在下一个请求中读取到主应用程序。 然后cookie将被服务器读取并允许安全的静态资产被服务。 我最初的想法是设置一个cookie,它违背了在每个请求上使用授权标头的目的,因为即使在第一个API请求中删除了cookie,也可以读取该cookie。 允许之前提到的静态资产在不需要authentication的情况下(html,css,application js)和第一个内部API请求(在应用程序中几乎立即被加载)加载,然后通过Angular的$ http拦截器访问请求授权标头。 如果发回401,则相同的拦截器可以redirect到login页面。 我认为第二种方法是比较简单的方法,因为只需要将静态文件中间件下的auth中间件移动到Angular中,然后更新http拦截器,但是认为静态文件可以加载然后redirect事后。 任何input赞赏。

警告:connect.session()MemoryStore不是为生产环境devise的,因为它会泄漏内存,并且不会扩展到单个进程

在这里好日子是我的代码: var express = require('express'); var session = require('express-session'); var app = express(); app.set('trust proxy', 1); app.use(session({ secret: 'secret', saveUninitialized: true, resave: false, maxAge: 1000 * 60 * 15, cookie:{ secure: true } })); 这段代码总是返回我的日志a: 警告:connect.session()MemoryStore不是为生产环境devise的,因为它会泄漏内存,并且不会扩展一个进程。 我尝试了谷歌search,但我似乎并不了解一些教程。 对不起,我的英语不好。