鲍勃使用Web应用程序来实现目标。和:
- 他的浏览器处于节食状态,因此不支持cookie。
- Web应用程序是一种流行的应用程序,它在给定的时刻可以与许多用户打交道-它必须很好地扩展。只要保持会话会限制同时连接的数量,并且当然会带来不可忽略的性能损失,我们可能希望拥有一个无会话系统:)
一些重要的注意事项:
- 我们确实具有传输安全性(HTTPS及其最好的朋友);
- 在幕后,Web应用程序代表当前用户(这些系统确实将Bob识别为用户之一)将很多操作委托给外部服务 -这意味着我们必须向他们转发Bob的凭据。
现在,我们如何对Bob进行身份验证(针对每个请求)?哪种方法可以实现这种情况?
- 通过HTML表单隐藏字段使用凭据打网球 ... 球包含凭据(用户名和密码),两个球拍分别是浏览器和Web应用程序。换句话说,我们可以通过表单字段而不是通过cookie来回传输数据。在每个Web请求中,浏览器都会发布凭据。但是,对于单页应用程序,这看起来像是在橡胶墙上打壁球,而不是打网球,因为包含凭据的Web表单可能会在整个页面生命周期中保持有效 (并且服务器将配置为不提供凭据)。
- 将用户名和密码存储在页面的上下文中-JavaScript变量等。此处需要单页,恕我直言。
- 基于加密令牌的身份验证。在这种情况下,登录操作将导致生成加密的安全令牌(用户名+密码+其他内容)。该令牌将被发还给客户端,并且即将到来的请求将带有令牌。这有意义吗?我们已经有了HTTPS ...
- 其他...
- 不得已:不要这样做,将凭据存储在会话中!会议很好。有或没有cookie。
关于上述任何想法,您是否会想到任何Web /安全性问题?例如,
- 超时 -我们可以保留一个timestamp以及凭据(时间戳= Bob输入凭据的时间)。例如,当NOW-timestamp> threshold时,我们可能会拒绝该请求。
- 跨站点脚本保护-不应有任何不同,对吗?
非常感谢您抽出宝贵的时间阅读本文:)