Asp.net 如何使用Thinktecture IdentityModel令牌防止重播攻击?

Asp.net 如何使用Thinktecture IdentityModel令牌防止重播攻击?,asp.net,security,asp.net-web-api,thinktecture-ident-server,thinktecture-ident-model,Asp.net,Security,Asp.net Web Api,Thinktecture Ident Server,Thinktecture Ident Model,我有两个网站在不同的领域。我正在使用Thinktecture IdentityModel实现SSO 用户登录到站点A。在某个点上,他们单击一个链接将他们带到站点B。站点A使用JWT令牌将用户重定向到站点B/Login.aspx?token=。站点B然后通过调用站点A上的API来验证令牌,以对用户进行身份验证。如果经过身份验证,用户将自动登录到站点B 默认情况下,Thinktecture代币可以使用10个小时,无法杀死代币(据我所知)。如果用户注销站点,则令牌仍然有效。我可以查看浏览器历史记录并获

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

用户登录到站点A。在某个点上,他们单击一个链接将他们带到站点B。站点A使用JWT令牌将用户重定向到站点B/Login.aspx?token=。站点B然后通过调用站点A上的API来验证令牌,以对用户进行身份验证。如果经过身份验证,用户将自动登录到站点B


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

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

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

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

话虽如此,使用WS-Fed的被动身份验证仍然容易受到重播攻击。虽然令牌已发布到您的站点,但在浏览器上点击几次“后退”(即使在注销后)将重新将令牌发布到您的站点,并将用户重新登录

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

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

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

当然,这个缓存不会在进程循环中生存,在web场场景中也不够。如果您还想在这些场景中减轻这种攻击,那么需要某种分布式持久缓存


我实现了一个,您可以研究并使用它。

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

话虽如此,使用WS-Fed的被动身份验证仍然容易受到重播攻击。虽然令牌已发布到您的站点,但在浏览器上点击几次“后退”(即使在注销后)将重新将令牌发布到您的站点,并将用户重新登录

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

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

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

当然,这个缓存不会在进程循环中生存,在web场场景中也不够。如果您还想在这些场景中减轻这种攻击,那么需要某种分布式持久缓存


我实现了一个,您可以研究并使用它。

好吧,与其提出自己的手工SSO协议,不如使用一些标准的东西(比如WS-Fed或OpenID Connect)并从他们的威胁模型和缓解技术中获益?Thinktecture是否支持联合注销或取消安全令牌?WS-Federation直接构建在.NET 4.5中,包括注销-Thinktecture不是一个协议-只是一个帮助程序库。好吧-与其提出自己的手动SSO协议,不如使用它标准的东西(如WS-Fed或OpenID Connect)并从其威胁模型和缓解技术中获益?Thinktecture是否支持联合注销或取消安全令牌?WS-Federation直接构建在.NET 4.5中,包括注销-Thinktecture不是协议-只是一个帮助程序库。此设置在哪里?我想你刚才已经描述了我未经授权的错误的原因。@ PtEWWONE这个设置存在于Stase.IddiType——WebIdaseFund(WIF)配置下的Web.CONFIG中。我想你刚才已经描述了我未经授权的错误的原因。@ PtEWWONE这个设置存在于Surviv.IdistyMead——WebIdaseFund(WIF)配置下的Web.CONFIG中。