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