Bob 使用 Web 应用程序来实现某些目标:
- 他的浏览器正在节食,因此它不支持 饼干。
- Web 应用程序是一个流行的应用程序,它在一个给定的时刻处理大量的用户-它必须 规模很好。只要保持会话将强制 对同时连接的数量的限制,当然,将带来一个不可忽略的 表现罚款,我们可能希望有一个无会话的系统:)
一些重要的注释:
- 我们有 transport security(HTTPS和它最好的朋友) ;
- 在幕后,Web 应用程序在当前的 user's behalf上将大量操作委托给 external services(这些系统确实将 Bob 作为其用户之一)——这意味着 we have to forward them Bob's credentials。
现在,我们如何验证 Bob (对每个请求) ?
哪种方式才是实现这一目标的合理途径呢?
- 通过 HTML 表单隐藏字段使用凭证播放 网球... 球包含凭证(用户名和密码) ,而 两个球拍分别是浏览器和 Web 应用程序。换句话说,我们可以通过表单字段来回传输数据,而不是通过 cookie。在每个 Web 请求中,浏览器都会发布凭据。虽然,在 单页应用的情况下,这可能看起来像在橡胶墙上播放 南瓜,而不是在播放 网球,因为包含凭证的 网上表格可能会在 网页的整个生命周期中保持活跃(并且服务器将被配置为不提供凭证)。
- storing the username & the password in the context of the page - JavaScript variables etc. Single-page required here, IMHO.
- 基于加密令牌的认证。在这种情况下,登录操作将导致生成加密的安全令牌(用户名 + 密码 + 其他东西)。这个令牌将被服务回客户端,即将到来的请求将伴随这个令牌。这说得通吗?我们已经有 HTTPS 了。
- 其他人。
- 最后一招: 不要这样做,在会话中存储凭据! 会话是好的。有或没有 cookie。
Does any web / security concern come into your mind, regarding any of the previously described ideas? For example,
- Time-outing -我们可以保留一个 时间戳,以及凭据(时间戳 = Bob 输入凭据的时间)。例如,当 NOW - timestamp > threshold,我们可能会拒绝请求。
- Cross-site scripting protection - should not be different in any way, right?
非常感谢您花时间阅读本文:)