想象一下客户端不提供
state
参数但使用 PKCE
方法的情况。
如何进行CSRF攻击?
如果客户端使用
state
,还需要PKCE
参数吗?
我读过https://security.stackexchange.com/a/215027但它没有提供一个很好的例子。
state 参数是客户端验证的参数,不幸的是,并非每个客户端实现都能正确验证状态参数。所以让客户为此负责是有风险的。
PKCE 由授权服务器进行验证,并且他们可能比让客户端验证这一点做得更好。
所以我认为他们都是互相称赞的,所以如果其中一方忘记验证,那么另一方的保护仍然会覆盖它。
我最近在这里发表了有关状态和随机数参数的博客:
它们的用途有点不同。 PKCE 是一种机制,允许授权服务器确保交换令牌的授权代码的客户端与发起流程的客户端是同一客户端。
state参数仅供客户端使用。授权服务器不关心它。客户端使用它来验证从授权服务器获取的令牌响应确实是由该客户端之前初始化的。
因此,如果客户端使用 PKCE 但不使用状态,它只能保护自己免受某些攻击向量的侵害。这些功能最好一起使用。