OpenIdConnect中Redirect_Uri的真正目的是什么?

时间:2019-03-27 04:26:00

标签: redirect azure-active-directory

我正在尝试为我的Web应用程序设置OpenID Connect身份验证(单租户)。我了解AAD中的Reply Url应该如何工作。 AAD管理员使用SignInUrl,ReplyUri,AppIdUri等注册Web应用程序。MicrosoftAAD处理完整的用户体验,以提示和验证凭据。攻击者可能无法进行合法的站点攻击(,因为它是* .microsoftonline.com页面)。

问题:

  1. Redirect_Uri在OpenIdConnect中的真正目的是什么?它可以抵抗Redirect_Uri攻击吗?

  2. 我试图从Web客户端发送不同的Redirect_Uri。 Microsoft AAD由于回复URL不匹配错误而失败。但是在刷新Web应用程序时,它现在已登录。 AAD是否不应该使我使用非法重定向uri登录的尝试无效?

请建议我如何查看重定向Uri。我想利用真正的好处。

2 个答案:

答案 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异常现象背后的奥秘。

问题:

  1. Redirect_Uri在OpenIdConnect中的真正目的是什么?它能抵抗Redirect_Uri攻击吗?

    [OP] 是的。如果redirect_uri域与AAD服务器注册和Web客户端不同,则它将使登录尝试无效。

  2. 我试图从Web客户端发送不同的Redirect_Uri。 Microsoft AAD由于回复URL不匹配错误而失败。但是在刷新Web应用程序时,它现在已登录。 AAD是否应不会使我使用非法重定向uri登录的尝试无效?

    [OP] ,当我将应用程序托管在localhost上时,即使在不同的端口或相同的域上,Redirect_Uri也不起作用。因此,如果尽管出现第一个Reply-Uri-Mismatch错误,但仍然单击“登录”,它将忽略Redirect_Uri验证。

请注意,如果攻击者希望将受害者重定向到非法页面以重新输入凭据,则Redirect_Uri会处理Open重定向攻击。