我建立一个无状态的认证系统为DART前端和发现,这是相当棘手打造一个无状态的认证系统,该系统实际上是安全的。
堆栈如下:省道应用程序中使用杰克逊来回JSON和Java对象之间的转换,做JSON POST到一个Spring MVC的后端。 一切都将在后面SSL时投产。
方案1:用户登录时,我保持一个会话在Java端 - 这不是无状态的,会造成问题,当负载平衡的后端。
方案2:在命中的登录按钮,POST被达特做验证控制器,其验证凭证和传递回令牌(它可以是一串串联在一起的UUID)。 令牌回来给前端 - 此令牌的用户名组合届时将有与每个请求一起传递。 DoubleClick应用程序现在需要在一些地方保存此令牌,因为DoubleClick应用程序编译成JavaScript,饼干似乎不是一个选项(JavaScript不能访问饼干?)。 HTML5的localStorage想到的,但是从我读过,这是很容易劫持该令牌,如果任何形式的XSS漏洞的可用(和我猜的浏览器插件和工具栏的JavaScript注入到页面也可以访问此令牌)。
方案3:就像在方案2中,我得到传回从Spring MVC后端令牌,但不是将其存储在HTML5本地存储,我保持在一个JavaScript变量,如果打开一个新的窗口,通过它。 同样的问题也适用于这里,因为它是一个JavaScript变量中,任何种类的XSS漏洞或浏览器插件可以捉住该令牌并劫持了会议。
因此,它似乎是一个无状态的“会话”,也就是HTML5 LocalStorage是最方便的,但它并不安全。 有没有一种办法,以确保它还是有另一种方式,让我无国籍身份验证的浏览器?