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。
我将以 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。