我正在尝试为我的Web应用程序设置OpenID Connect身份验证(单租户)。我了解AAD中的Reply Url应该如何工作。 AAD管理员使用SignInUrl,ReplyUri,AppIdUri等注册Web应用程序。MicrosoftAAD处理完整的用户体验,以提示和验证凭据。攻击者可能无法进行合法的站点攻击(,因为它是* .microsoftonline.com页面)。
问题:
Redirect_Uri在OpenIdConnect中的真正目的是什么?它可以抵抗Redirect_Uri攻击吗?
我试图从Web客户端发送不同的Redirect_Uri。 Microsoft AAD由于回复URL不匹配错误而失败。但是在刷新Web应用程序时,它现在已登录。 AAD是否不应该使我使用非法重定向uri登录的尝试无效?
请建议我如何查看重定向Uri。我想利用真正的好处。
答案 0 :(得分:2)
OpenIdConnect中Redirect_Uri的真正目的是什么?
来自OpenID Connect, 3.1.2.1 Authentication Request:
redirect_uri
REQUIRED. Redirection URI to which the response will be sent.
This URI MUST exactly match one of the Redirection URI values
for the Client pre-registered at the OpenID Provider [...]
因此,redirect_uri
的目的是告诉OpenID Provider(在您的情况下为Azure AD)在用户登录后应将对请求的响应发送到何处。
它可以抵抗Redirect_Uri攻击吗?
该参数本身提供了上述功能,它不会减轻任何攻击。客户端(即您的应用程序)和OpenID提供程序(即Azure AD)有责任确保他们做正确的事情,以防止遭受攻击的风险(包括与重定向相关的攻击)。
例如,如果OpenID提供者未验证请求中的redirect_uri
与为客户端配置的重定向URI完全匹配,则攻击者可能能够使用{{1}构造授权请求}指向由攻击者控制的URL,然后诱使用户触发请求。然后,对请求的响应将发送给攻击者,而不是用户登录的依赖方。
如果依赖方(在这种情况下,即您的应用程序)暴露了漏洞(例如,通过启用开放式重定向攻击或授权回复URL),则可能会发生与redirect_uri
相关的其他攻击这实际上不在您的控制范围内。
OAuth 2.0 Security Best Current Practice中描述了许多(和其他)攻击以及减轻或阻止它们的当前最佳实践。
我尝试从Web客户端发送不同的Redirect_Uri。 Microsoft AAD由于回复URL不匹配错误而失败。但是在刷新Web应用程序时,它现在已登录。 AAD是否应不会使我使用非法重定向uri登录的尝试无效?
您的应用程序似乎有问题。当Azure AD检测到所请求的redirect_uri
与客户端的授权回复URI不完全匹配时,Azure AD不会使用授权代码或任何令牌将其重定向回客户端。
您的应用之前可能已经建立了会话,或者可能未正确处理OpenID Connect流。不知道如何实现应用程序的具体细节是不可能说的。
答案 1 :(得分:1)
现在我想我发现了signin-redirect_uri异常现象背后的奥秘。
问题:
Redirect_Uri在OpenIdConnect中的真正目的是什么?它能抵抗Redirect_Uri攻击吗?
[OP] 是的。如果redirect_uri域与AAD服务器注册和Web客户端不同,则它将使登录尝试无效。
我试图从Web客户端发送不同的Redirect_Uri。 Microsoft AAD由于回复URL不匹配错误而失败。但是在刷新Web应用程序时,它现在已登录。 AAD是否应不会使我使用非法重定向uri登录的尝试无效?
[OP] ,当我将应用程序托管在localhost上时,即使在不同的端口或相同的域上,Redirect_Uri也不起作用。因此,如果尽管出现第一个Reply-Uri-Mismatch错误,但仍然单击“登录”,它将忽略Redirect_Uri验证。
请注意,如果攻击者希望将受害者重定向到非法页面以重新输入凭据,则Redirect_Uri会处理Open重定向攻击。