2015-12-03 27 views
2

我通过与智威汤逊认证的安全性在我的脑海一些结构问题的工作,我想弄清楚以下几点:智威汤逊是否共享/存储用于在客户端和服务器上签名的秘密?

  1. 如何JWT安全地传递服务器和客户端之间的秘密?

  2. 看看下面的摘录从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": "[email protected]", "xsrfToken": "d9b9714c-7ac0-42e0-8696-2dae95dbc33e" }

  • 客户如何创建和发送包含一个有效的请求xsrfToken声称,除非它在包含索赔之后可以首先签署JWT? (这xsrfToken毕竟是什么应该保持EvilBob伪造的请求吧?)可以在这里http://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/找到
  • 更多关于我目前的JWT XSRF过程的了解细节。

    回答

    1

    本文似乎将此称为“同步令牌模式”,但所述解决方案更适合于Double Submit Cookies方法而非Synchronizer Token Pattern

    双提交cookie涉及在标头或正文中发送cookie值,并将其与自动发送的浏览器cookie一起发送。如果您不支持CORS,那么无论如何设置标头中的标记都是安全的,就像任何自定义标头值一样(例如X-Requested-With)。这是因为自定义标头无法首先发送到跨域,因此验证它是否已从客户端传输来验证其是否已从其他域中传输。作为深度战略的防御,您可以将其设置为随机值,如this answer所解释的。

    随机值不需要来自服务器,也不需要签名。它只需要由CSPRNG生成。如果生成客户端,则应使用window.crypto。所有的服务器都检查头和cookie值是否匹配。

    第三方域名无法伪造请求,因为即使浏览器自动从受害者的计算机发送cookie值,攻击者也无法将该值包含在标头或请求正文中。

    通过Synchronizer Token Pattern,CSRF令牌在服务器端生成并存储在会话中。该值必须从每个表单提交中发送,并且经过验证的服务器端与匹配存储的令牌相符。

    +0

    哇,非常感谢你@SilverlightFox。这是非常全面和非常有用的,包括多种选择。非常感谢反馈。 – PLanger

    1
    1. 我可以解释Stormpath是如何做到的,还有其他一些方法。 Stormpath在JWT头中包含一个'kid'(密钥ID)字段,它是API密钥ID /密钥对的标识符。智威汤逊与秘密签署,并且ID存储在密钥id字段中。当Stormpath验证令牌时,它可以检索秘密。这适用于所有服务器和服务,但是从未将传递给客户端。使用客户端将单独的服务与秘密粘合在一起非常不安全。

    2. 客户端不应该生成JWT,这需要在服务器上完成。服务器知道XSRF令牌并可以在JWT中对其进行签名并将其放入cookie中。

    希望这些信息对您有所帮助!

    +0

    好的,有一些关键的东西我误解了JWT过程的工作原理。 1)服务器是唯一知道秘密的人。同一个Secret用于签署和验证所有用户的请求。 2)只有真实的客户端才能访问存储auth-token和xsrf-token的cookie。攻击者可以提交攻击请求,但攻击请求不会将xsrf-token作为HTTP头。从而使请求无效。 3)一旦请求到达服务器,服务器将检查头是否包含xsrf-token,如果是,则将其与JWT有效载荷中的xsrf-token比较。 – PLanger

    +0

    这听起来没错吗? – PLanger

    +0

    我第二个Davorins混乱[这里](https://disqus.com/home/discussion/stormpath/where_to_store_your_jwts_cookies_vs_html5_web_storage_stormpath_user_management_api/oldest/) – Rhubarb