security - OAuthV2 应用程序如何保护来自授权服务器的回调免受重放攻击?
问题描述
我将从这里举个例子。假设Resource Owner
想要授权Application
example-app.com 访问他的一些资源。
1)Resource Owner
将被定向到 中的 URI Authorization Server
,例如:
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
's 之前处理。例如,Attacker
将相同的请求发送到:
https://example-app.com/redirect
?code=g0ZGZmNjVmOWIjNTk2NTk4ZTYyZGI3
&state=xcoiv98y2kd22vusuye3kch
在我看来,Application
现在可以从 访问资源Resource Owner
并与 共享它Attacker
,特别是如果在验证Application
后创建与请求者的会话code
。这有任何意义吗?如何防范呢?
解决方案
为了利用这一点,攻击者首先需要获取重定向 url。这是困难的部分。重定向将从授权服务器发送到资源所有者,并且需要 HTTPS。
一旦攻击能够窥探到这一点,大多数安全性就会消失。
推荐阅读
- sql - 在 R 中使用 SQL 'UPDATE'、'SET'、'AND'
- xamarin.forms - 如何在 Xamarin 表单中创建边缘褪色的滚动视图?(Xamarin.ios)
- android - “不保留活动”和配置更改有什么区别?
- crop - 在 PCL 中裁剪多边形网格
- java - 使用休眠 5 进行 jibx 编组
- node.js - 我不明白为什么我的验证中间件会这样
- java - Java Spring:MongoRepository count() 和 findAll()
- python - 如何使yield格式的输出成为json输出中的“itemlist”属性
- c# - 母版页中的 Google reCaptcha
- angular - Ionic v4 datepicker清除按钮?