OAuthV2 应用程序如何防止对来自授权服务器的回调的重放攻击?

How OAuthV2 applications protect from replay attacks on the callback from the authorization server?

我将以 here 中的示例为例。假设 Resource Owner 想要授权 Application example-app.com 访问他的一些资源。

1) Resource Owner 将指向 Authorization Server 中的 URI,例如:

https://authorization-server.com/auth
 ?response_type=code
 &client_id=29352915982374239857
 &redirect_uri=https%3A%2F%2Fexample-app.com%2Fcallback
 &scope=create+delete
 &state=xcoiv98y2kd22vusuye3kch

2) Resource Owner 将通过 Authorization Server 进行身份验证,并将重定向到:

https://example-app.com/redirect
 ?code=g0ZGZmNjVmOWIjNTk2NTk4ZTYyZGI3
 &state=xcoiv98y2kd22vusuye3kch

问题:如果其他人复制步骤 2) 中的 URI 并向同一 URI 发出请求怎么办?假设来自 Attacker 的请求将在 Resource Owner 的请求之前得到处理。例如,Attacker 将相同的请求发送到:

https://example-app.com/redirect
 ?code=g0ZGZmNjVmOWIjNTk2NTk4ZTYyZGI3
 &state=xcoiv98y2kd22vusuye3kch

在我看来 Application 现在可以从 Resource Owner 访问资源并与 Attacker 共享资源,特别是如果 Application 创建会话一旦 code 得到验证,就与请求者联系。这有任何意义吗?如何防范?

要利用这一点,攻击者首先需要获得重定向 url。这是困难的部分。重定向将从授权服务器发送到资源所有者,并且需要 HTTPS。

一旦攻击能够窥探到这一点,大多数安全性就会消失 window。