html - 如何为客户端 dart 应用程序构建安全的无状态身份验证系统

标签 html session authentication dart

我正在为 Dart 前端构建一个无状态身份验证系统,并发现构建一个实际上安全的无状态身份验证系统非常棘手。

堆栈如下: Dart 应用程序将 JSON POST 发送到 Spring MVC 后端,使用 Jackson 在 JSON 和 Java 对象之间来回转换。当 SSL 投入生产时,一切都将落后于 SSL。

场景 1:用户登录,我在 Java 端保持一个 session - 这不是无状态的,并且会在后端负载平衡时出现问题。

场景 2:点击登录按钮后,Dart 向身份验证 Controller 发送 POST,该 Controller 验证凭据并传回一个 token (可能是一堆串联在一起的 UUID)。 token 返回到前端 - 这个 token 与用户名相结合,然后必须与每个请求一起传递。 dart 应用程序现在需要将此 token 存储在某处,因为 Dart 应用程序编译为 JavaScript,cookie 似乎不是一种选择(JavaScript 无法访问 cookie?)。想到了 HTML5 localstorage,但根据我的阅读,如果存在任何形式的 XSS 漏洞,劫持该 token 非常容易(而且我猜测将 JavaScript 注入(inject)页面的浏览器插件和工具栏也可以访问此 token )。

场景 3:就像在场景 2 中一样,我从 Spring MVC 后端传回了一个 token ,但我没有将它存储在 HTML5 本地存储中,而是保存在一个 JavaScript 变量中,并在打开新窗口时将其传递。
同样的问题也适用于此,因为它位于 javascript 变量中,任何类型的 XSS 漏洞或浏览器插件都可以获取该 token 并劫持 session 。

所以对于无状态的“ session ”来说,HTML5 localstorage 是最方便的,但它并不安全。有没有办法保护它,或者是否有另一种方法可以让我在浏览器中进行无状态身份验证?

最佳答案

我在 Information Security 上得到了一个相当不错的答案,它建议使用带有 HttpOnly 和 Secure 标志的 cookie:

https://security.stackexchange.com/questions/84860/how-to-build-a-secure-stateless-authentication-system-for-a-client-side-javascri/84861#84861

我不得不切换到 servlet3 以允许设置 HttpOnly 标志:

Set http-only on cookies created in Spring MVC Controller

在 Dart 方面,我不得不从 BrowserClient 切换,因为它不允许跨域 cookie:

Dart BrowserClient POST not including my cookies

关于html - 如何为客户端 dart 应用程序构建安全的无状态身份验证系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331222/

相关文章:

php - 从 HTML 屏幕打印动态页眉或页脚

javascript - 如何将 <stdio.h> 视为简单文本而不是 html 标签

session - WAR 之间共享 session

javascript - 如何检查用户是否在 AngularJS 路由器中经过身份验证?

iOS - Facebook SDK v.4.5.1 - 获取用户名和电子邮件

swift - 如何在另一个 UIViewController 中显示使用 Firebase 登录的用户名

css - 底部边距不适用于 html 页面

javascript - overflow hidden 的CSS绝对位置动画

java - 将 HashMap 存储在 java webapp session 中

oracle - 在oracle触发器中获取 session os用户