- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个使用 Backbone.js 构建的网站。该站点在 Symfony 中使用 FOSRestBundle 构建了一个 RESTful API。开发进展顺利,直到我偶然发现一些与用户相关的票证。
据我了解,处理此类问题的最佳方法是使用基于 token 的系统,用户在批准登录后获得访问 token 。我将描述我目前对工作流程的看法,并在此过程中提出问题。更重要的是,如果我有误解,请纠正我。
首先,用户访问登录表单,然后用户输入凭据,并向服务器发送 AJAX 请求。据我了解,这一切都应该使用 SSL 处理,但是使用 Backbonejs,您不能简单地说应该使用 HTTPS 访问登录页面,因为 Backbone 是一个单页框架。那么这会迫使我在整个应用程序中使用 HTTPS 吗?
在下一步中,REST 服务器验证凭据并获得批准,然后 REST 服务器将访问 token 发送到客户端。这个 token (在客户端)是保存在本地存储还是 cookie 中?
登录信息是否也存储在服务器上,以便 REST 服务器可以在一定时间后将用户注销?
现在,客户端将这个访问 token 与其他请求一起发送,以便服务器可以识别客户端,并批准或不批准请求。那么访问 token 也存储在 REST 服务器上?
最后,这就是聪明人所说的“oauth”,还是与它有关?
谢谢你。
最佳答案
让我们一次一个地回答你的问题。
From what I understand this should all be handled with SSL, but with Backbonejs, you can't simply say that the login page should be accessed with HTTPS, as Backbone is a one-page framework. So will this force me to use HTTPS through out the application?
好的,那里有很多东西要解压。让我们从 SSL/HTTPS 开始。 HTTPS 是一种协议(protocol);换句话说,它定义了如何向/从服务器发送数据包。它与您的应用程序是单页还是多页无关;任何一种类型的站点都可以使用 HTTP 或 HTTPS。
现在,话虽如此,通过 HTTP 发送登录信息(或任何其他包含密码的内容)是一个非常糟糕的主意,因为它使“坏人”很容易窃取用户的密码。因此,无论您是在做单页应用程序还是多页应用程序,在发送登录信息时都应该始终使用 HTTPS。由于必须同时支持 HTTP 和 HTTPS 很痛苦,而且由于其他非登录数据也可能很敏感,因此许多人选择仅通过 HTTPS 完成所有请求(但您不必这样做)。
因此,要回答您的实际问题,Backbone 根本不会强制您使用 HTTPS 登录。保护你的用户密码是强制你的。
In the next step, the REST server validates the credentials, and they are approved, then the REST server sends an access token to the client. Is this token saved (on the client-side) in local storage or a cookie?
虽然任何给定的框架可能会有所不同,但绝大多数使用 cookie 将 token 保存在本地。由于各种原因,它们是处理这类事情的最佳工具。
Also is the login stored at the server, so that the REST server can log the user out after a certain amount of time?
您已经有了基本的正确想法,但是服务器并没有完全存储登录信息……它更像是服务器将用户登录并创建了一个“ session ”。它为该 session 提供一个 ID,然后每当用户发出新请求时,该 session ID 都会随请求一起提供(因为这就是 cookie 的工作方式)。然后服务器可以说“哦,这是 Bob 的 session ”并为 Bob 提供适当的内容。
Now, the client sends this access token along with other request, so that the server can identify the client, and approve the request or not. So the access token is also stored on the REST server?
如果您正在运行两个单独的服务器,它们将不会神奇地进行通信;你必须让他们互相交谈。因此,如果您的整个应用程序只有一个(可能是 REST-ful)服务器,您的生活会更轻松。如果您不能,那么您的 REST 服务器将不得不在每次收到请求时询问您的其他服务器“嘿,告诉我有关 session SESSION ID 的信息”。
Lastly is this what the smart people call "oauth", or does it relate to it?
有点,有点,不是真的。 OAuth 是一种授权标准,因此它有点相关,但除非您的登录系统涉及一个完全独立的服务器,否则您没有理由使用它。您可以使用 OAuth 来解决您的“两台服务器,一台 REST-ful 另一台没有”的问题,但这可能是矫枉过正(不管它超出了我在这篇 Stack Overflow 帖子中可以解释的范围)。
希望有帮助。
关于rest - 有关使用 REST 和 Backbone 的身份验证工作流程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14589080/
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
首先是一些背景;我们正在开发一个数据仓库,并对我们的 ETL 过程使用哪些工具进行一些研究。该团队非常以开发人员为中心,每个人都熟悉 C#。到目前为止,我已经看过 RhinoETL、Pentaho (
我需要具有管理员权限的进程。从this问题和答案来看,似乎没有比启动单独进程更好的方法了。因为我宁愿有一个专用于该过程的过程,而不是仅为此方法在第二个过程中启动我的原始应用程序–我以为我会在VS201
我有这个函数来压平对象 export function flattenObject(object: Object, prefix: string = "") { return Object.key
我正在开发一个基于java的Web应用程序,它要求我使用来自SIP( session 启动协议(protocol))消息的输入生成序列图。我必须表示不同电话和相应服务器之间的调用流程。我可以利用任何工
这是我的代码: Process p=Runtime.getRuntime().exec("something command"); String s; JFrame frame = new JFram
我对 istio 的 mTLS 流程有点困惑。在bookinginfo 示例中,我看到服务通过http 而不是https 进行调用。如果服务之间有 mTLS 那么服务会进行 http 调用吗? 是否可
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
之前做过一个简单的纸牌游戏,对程序的整体流程有自己的想法。我最关心的是卡片触发器。 假设我们有一张名为“Guy”的牌,其效果为“每当你打出另一张牌时,获得 2 点生命”。我将如何将其合并到我的代码中?
我有 4 个 Activity 。 A、B、C 和 D。 用户可以从每个 Activity 开始任何 Activity 。 即 Activity A 有 3 个按钮来启动 B、C 和 D。以同样的方式
我做了一个简单的路由器类,简化后看起来像这样 // @flow import { Container } from 'unstated' type State = { history: Objec
我有两个 Activity ,比如 A1 和 A2。顺序为 A1->A2我从 A1 开始 A2 而没有在 A1 中调用 finish() 。在 A2 中按下后退按钮后,我想在 A1 中触发一个功能。但
我正在考虑在我的下一个项目中使用 BPEL。我试用了 Netbeans BPEL 设计器,我对它很满意。但在我决定使用 BPEL 之前,我想知道它对测试驱动开发的适用程度。不幸的是,我对那个话题知之甚
我需要将两个表格堆叠在一起,前后都有内容。我无法让后面的内容正常流动。堆叠的 table 高度可变。 HTML 结构: ... other content ...
我是 Hibernate 的新手。我无法理解 Hibernate 的流程。请澄清我的疑问。 我有“HibernateUtil.java ”和以下语句 sessionFactory = new Anno
早上好 我开始使用 Ruby,想创建一个小工具来获取我的公共(public) IP 并通过电子邮件发送。我遇到了字符串比较和无法处理的 if/else block 的基本问题。 代码非常简单(见下文)
我目前正尝试在我的团队中建立一个开发流程并阅读有关 GitFlow 的信息。它看起来很有趣,但我可以发现一些问题。 让我们假设以下场景: 我们完成了 F1、F2 和 F3 功能,并将它们 merge
我已经使用 git flow 有一段时间了。我很想了解一个特定的用例。 对于我的一个项目,我有一张新网站功能的门票。此工单取决于许多子任务。我想为主工单创建一个功能分支,然后为每个子任务创建一个脱离父
简介 "终结"一般被分为确定性终结(显示清除)与非确定性终结(隐式清除) 确定性终结主要 提供给开发人员一个显式清理的方法,比如try-finally,using。
你怎么知道在一个程序中已经发现并解决了尽可能多的错误? 几年前我读过一篇关于调试的文档(我认为这是某种 HOWTO)。其中,该文档描述了一种技术,其中编程团队故意将错误添加到代码中并将其传递给 QA
我是一名优秀的程序员,十分优秀!