如何使用Thinktecture IdentityModel令牌阻止重放攻击?

时间:2013-11-22 22:16:49

标签: asp.net security asp.net-web-api thinktecture-ident-server thinktecture-ident-model

我在不同的域上有两个站点。我正在使用Thinktecture IdentityModel实现SSO。

用户登录到站点A.在某些时候,他们会点击链接将他们带到站点B.站点A将用户重定向到站点B / Login.aspx?token =<令牌>使用JWT令牌。然后,站点B通过调用站点A上的API来验证用户身份,从而验证令牌。如果经过身份验证,则用户将自动登录到站点B.

默认情况下,Thinktecture令牌持续10个小时,无法杀死令牌(据我所知)。如果用户退出站点,则令牌仍然有效。我可以查看浏览器历史记录并获取“Login.aspx?token =< token>” url并自动重新登录。有没有办法在他们注销时终止所有用户令牌?令牌不应作为查询字符串的一部分传递吗?防止重播攻击的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

正如@leastprivilege对您的问题所评论的那样,只需将两个网站定义为信任相同IDP的RP(信赖方),即可轻松实现两个网站的SSO。这当然会简化您的身份验证解决方案架构。

话虽如此,使用WS-Fed的被动身份验证仍然容易受到重放攻击。虽然令牌已发布到您的网站,但在您的浏览器上“退回”几次(即使在退出后)也会将令牌重新发布到您的网站,并会将用户重新签名。

幸运的是,WIF有办法减轻这种攻击。通过配置:

    <identityConfiguration>
     .......
 <tokenReplayDetection enabled="true" />
     .....
    </identityConfiguration>

然后,Wif将已使用的令牌缓存在服务器上,并确保它只使用一次。 (如果检测到重播攻击,则会引发适当的异常SecurityTokenReplayDetectedException)。

此缓存当然不会在进程回收中存在,并且在Web场方案中是不够的。如果你想在这些场景中缓解这种攻击,你还需要某种分布式的攻击方式。持久缓存。

我实现了一个a contribution to Thinktecture.IdentityModel,您可以查看并使用它。

答案 1 :(得分:0)

听起来像标记应该解决问题,至少在你描述的这个最明显的场景中。没有使用JWT令牌,但SAML令牌通常是POST。我敢打赌,服务器也可以配置为发布jwt令牌。