我有两个网站在不同的领域。我正在使用Thinktecture IdentityModel实现单点登录。
用户登录到站点A,然后单击链接转到站点B。站点A使用JWT令牌将用户重定向到站点B/Login.aspx? token =< token >。然后,站点B通过调用站点A上的API对用户进行身份验证来验证令牌。如果通过身份验证,用户将自动登录到站点B。
默认情况下,Thinktecture令牌持续10小时,无法杀死令牌(据我所知)。如果用户从站点注销,令牌仍然有效。我可以查看浏览器历史记录并获取"Login.aspx?token=< token >“url,然后自动重新登录。有没有一种方法可以在用户注销时杀死所有令牌?令牌不应该作为查询字符串的一部分传递吗?防止重放攻击的最佳方法是什么?
发布于 2014-01-15 21:45:00
正如@leastprivilege对您的问题所评论的那样,您只需将两个站点都定义为信任同一IDP的RP(依赖方),就可以轻松地实现两个站点的SSO。这当然会简化您的身份验证解决方案体系结构。
话虽如此,使用WS-Fed的被动身份验证仍然容易受到重放攻击。尽管令牌已发布到您的站点上,但在浏览器上点击几次“返回”(即使在注销之后),也会将令牌重新发布到您的站点,并让用户重新登录。
幸运的是,WIF有一种方法可以减轻这种攻击。通过配置:
<identityConfiguration>
.......
<tokenReplayDetection enabled="true" />
.....
</identityConfiguration>然后,Wif将使用的令牌缓存在服务器上,并确保它只使用一次。(如果检测到SecurityTokenReplayDetectedException重放攻击,则会引发适当的异常)。
当然,这种缓存不会在进程回收中幸存下来,并且在web场场景中也是不够的。如果您还想在这些场景中缓解这种攻击,您将需要某种类型的分布式持久缓存。
我实现了一个a contribution to Thinktecture.IdentityModel,您可以查看并使用它。
发布于 2013-11-26 04:23:05
听起来POSTing令牌应该可以解决这个问题,至少在您描述的这个最明显的场景中是这样。我没有使用过JWT令牌,但是SAML令牌通常是POSTed的。我敢打赌,服务器也可以配置为发布jwt令牌。
https://stackoverflow.com/questions/20155529
复制相似问题