【发布时间】:2016-03-07 15:29:23
【问题描述】:
我正在解决一些与 JWT 身份验证安全性相关的架构问题,并试图弄清楚以下几点:
JWT 如何在服务器和客户端之间安全地传递密钥?
看看下面的摘自https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ ....................................
可以通过使用同步令牌模式来防止 CSRF。这听起来很复杂,但所有现代 Web 框架都支持这一点。
例如,AngularJS 有一个解决方案来验证 cookie 是否只能由您的域访问。直接来自 AngularJS 文档:
'在执行 XHR 请求时,$http 服务从 cookie 中读取一个令牌(默认为 XSRF-TOKEN)并将其设置为 HTTP 标头(X-XSRF-TOKEN)。由于只有在您的域上运行的 JavaScript 才能读取 cookie,因此您的服务器可以确信 XHR 来自在您的域上运行的 JavaScript。 您可以通过包含 xsrfToken JWT 声明使此 CSRF 保护无状态:'
{ "iss": "http://galaxies.com", "exp": 1300819380, "scopes": ["explorer", "solar-harvester", "seller"], "sub": "tom@andromeda.com", "xsrfToken": "d9b9714c-7ac0-42e0-8696-2dae95dbc33e" }
- 客户端如何创建和发送包含 xsrfToken 声明的有效请求,除非它可以在包含声明后首先签署 JWT? (毕竟这个 xsrfToken 应该是为了防止 EvilBob 伪造请求吧?)
关于我目前对 JWT XSRF 流程的理解的更多详细信息可以在这里找到http://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/。
【问题讨论】:
标签: json rest security csrf jwt