我可以使用 CSRF 令牌作为 OAuth 流程中状态参数的值吗?

问题描述 投票:0回答:1

在实现 Azure OAuth 流程时,我使用了

state
参数,Azure 文档介绍了
state
参数:

请求中包含的值也会在令牌响应中返回。它可以是您希望的任何内容的字符串。随机生成的唯一值通常用于防止跨站点请求伪造攻击。该值还可以对有关身份验证请求发生之前用户在应用程序中的状态的信息进行编码。例如,它可以对它们所在的页面或视图进行编码。

因此,我的 Web 应用程序已经生成了这样的唯一字符串,即 CSRf 令牌(UUID)。因此,我使用相同的 CSRF 令牌(UUID)并传递给

state
参数。当来自 OAuth 提供商的响应时,我已与会话中的 CSRF 令牌交叉。

但是,最近我公司的安全团队表示 CSRF 令牌不应该以这种方式使用。据他们说

CRSF 令牌是不应共享的秘密。因此,将其用作状态值是对 CSRF 令牌的不当使用,并会带来(小)安全风险。

但是,如果我仔细观察其他正常(非 Oauth)请求,那么相同的 CSRF 令牌会在请求标头中传递,所以我问他们,如果 CSRF 令牌是秘密的,那么为什么它会在请求标头中传递,这也可能是“引入了(小的)安全风险。”我收到的答案并不令人信服。因此在这个大型论坛上提出这个问题:

我们可以使用 CSRF 令牌作为 OAuth 请求中

state
参数的值吗?如果使用CSRF token作为
state
参数,是否存在安全风险?

java security oauth-2.0 csrf owasp
1个回答
0
投票

这要看情况。

仅当使用双重提交 Cookie (DSC) 模式实现时,您才能公开使用 CSRF 令牌。在这种情况下,正如您所注意到的,令牌在 GET 请求标头中传递。 但是,如果您的网站使用

同步器令牌模式

(STP),则此令牌必须始终保密 在您的情况下,您的公司似乎正在使用 DSC 模式,因此可以将其值用于

state

参数。但作为一般规则,我想说创建一个新的秘密通常更安全,以避免基于所使用的令牌模式的潜在问题。

    

© www.soinside.com 2019 - 2024. All rights reserved.