- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我最近读了Cookies vs Tokens对于 Angularjs 并实现了登录和身份验证部分,以允许用户从登录页面登录。该应用程序设置为将帐户模块(负责登录、帐户注册、个人资料等)作为一个单独的页面,该页面将重定向到主应用程序的 SPA。
成功登录后, token 将作为 JWT 发送回登录页面客户端,并通过 js 设置 sessionStorage/localStorage 值。最后,用户被重定向(也通过 js)到主应用程序。问题是因为我通过 js 重定向无法设置 header ,这显然在加载页面时主应用程序中的 auth 失败(因为我的 auth 中间件高于静态和 auth api 请求)。如果我尝试在表单发布后从服务器重定向,而不是在成功时通过 JSON 返回 token ,则 sessionStorage 将不会如博客文章中所述通过 js 设置。
我提出了几个想法,并希望就哪些想法对最佳实践有益提出意见。
从服务器设置一个响应身份验证 cookie“仅 http”(我们所有的浏览器要求都允许这样做)cookie,该 cookie 在对主应用程序的下一个请求中读取。然后,cookie 将由服务器读取并允许提供 protected 静态 Assets 。我最初的想法是设置 cookie 违背了在每个请求上使用 Authorization header 的目的,因为有时可以读取 cookie,即使它在第一个 api 请求中被删除也是如此。
允许在没有身份验证的情况下加载前面提到的静态 Assets (html、css、应用程序 js),并且在第一个内部 API 请求(在应用程序中几乎在加载时立即需要),然后可以通过 Angular 的$http 拦截器设置请求授权 header 。如果发回 401,则同一拦截器可以重定向到登录页面。
我认为第二种方法会更简单,因为只需要将 auth 中间件移动到静态文件中间件下,然后更新 Angular 中的 http 拦截器,但我认为让静态文件能够加载可能是不好的做法然后在事后重定向。感谢任何输入。
最佳答案
针对您的第 1 点
... My initial thought was setting a cookie defeats the purpose of using a Authorization header on every request since there is a time the cookie could then be read even if it's removed on the first api request.
授权 header 的使用并不意味着与 cookie 的使用相互排斥。这个想法是在它最适合单页应用程序和 native 移动应用程序中的问题时使用它。然而,由于它确实依赖于某种客户端存储,最好是 sessionStorage,如果在旧浏览器中使用 sessionStorage 存在问题,建议有时甚至使用 cookie 来存储 token 。因此,只要您使用 cookie 来存储 token 而不是用于身份验证,您就没有达到目的。请参阅后续文章中的第 1 点 https://auth0.com/blog/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/
If you are wondering "but if I store the token in the cookie I'm back to square one". Not really, in this case you are using cookies as a storage mechanism, not as an authentication mechanism (i.e. the cookie won't be used by the web framework to authenticate a user, hence no XSRF attack)
关于node.js - 验证 Json Web Token 并在登录后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486472/
我用运行 Node node --debug app OR node --debug-brk app 它有反应 debugger listening on port 5858 Express serv
这个问题在这里已经有了答案: What is the difference between (int *i) and (int* i) in context of both C and C++? [
我有一个应用程序,它通过消息队列将数据库写入命令分派(dispatch)给工作人员(数量非常大),因此无法保证它们的接收顺序。 我有两个 Node ,例如“Account”和“Media”。在此假设的
有没有办法在调用 ts-node 时将选项传递给 Node ?我正在尝试在 Node 中使用一个实验性功能,如果它能与 ts-node 一起使用,那就太好了。 这就是我目前正在做的事情: ts-nod
我有一个容器化的Node应用程序,它在DigitalOcean服务器上运行。当我更新服务器上的应用程序时,该应用程序必须关闭一小段时间。为了能够更新应用程序并避免停机,我目前正在阅读零停机时间部署/蓝
我正在编写一个 Node.js 应用程序。我正在使用 request 和 Cheerio 加载一组 URL 并获取该网站的大量信息,现在假设我想要获取的只是标题: var urls = {"url_1
如果不弹出以下错误,我无法安装任何 Node.js 模块。错误代码引用package.json文件。如果知道为什么会发生这种情况,我们将不胜感激。 最佳答案 这些不是错误,它们只是警告。一切都应该如此
如果我运行(从我的项目目录中): supervisor javascripts/index.js 我得到:/usr/bin/env: Node :没有这样的文件或目录 如果我运行: node java
我已遵循使用 Node-Inspector 的所有步骤 但是当我打开应用程序时,我在控制台上看不到任何脚本或日志。 我的应用程序在端口 4000 上运行。我认为唯一可能发生冲突的是端口 8080 上的
我在android中使用rxjava2,有时会遇到这样的问题: Observable.fromArray( // maybe a list about photo url in SD
我目前正在使用 Node 光纤来编写同步服务器端代码。我主要通过 try-catch block 进行错误处理,但外部库或其他小部分异步代码中总是有可能发生错误。我正在考虑使用新的域功能来尝试将这些错
看起来node-debug是node-inspector周围的一个shell?分别什么时候应该使用? 最佳答案 如果您安装node-debug,您只能访问node-debug命令。 如果您安装node
我目前正在代理后面工作,该代理不允许我执行此命令的 HTTP GET 请求阶段: Node node-sass/scripts/build.js 请求阶段: gyp http GET https://
听说node js可以用在服务端。我以前用过jsp。 jsp页面内部的java代码对客户端是不可见的。如果 Node js 只是 javascript,那么它如何对客户端不可见? 最佳答案 首先,No
我正在为 Node native 插件从 node-waf 构建迁移到 node-gyp 构建系统。 node-gyp 说它支持多个目标版本,但我在使用 node-gyp 时找不到如何指定目标 Nod
给定一个 $node ,我正在尝试在以下两种输出该 $node 的方式之间做出决定。 要么 $output = theme('node', $node); 或 node_build_content($
如果package.json中的窗口A打开一个新窗口B,node-main如何访问它?这是我的代码: package.json { "main": "index.html",
我试图在我的 xml 中的特定节点 ( ) 之前插入一个注释节点。这是它的方法: function test(xmlResponse) { var parser = new DOMParse
我正在尝试做npm install wrtc使用 Node 版本 16.14.0 但这还没有完成。它在给npm error code 1所以我试图将 Node 版本更改为以前的 lts 14.19.0
当我在 Visual Studio 中运行 Node.js 应用程序时,我收到以下消息:DeprecationWarning: 'node --debug' 和 'node --debug-brk'
我是一名优秀的程序员,十分优秀!