Azure AD B2C容易受到Open Redirect的攻击?

时间:2018-01-19 12:04:33

标签: azure redirect logout azure-ad-b2c

我正在使用OWIN& OpenId使用Azure AD B2C为我的Web应用程序验证用户,Startup.Auth.cs的代码如下:

app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                 MetadataAddress = string.Format(AadInstance, Tenant, policy),
                AuthenticationType = policy,
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                RedirectUri = postLogoutRedirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifica....

在注销时,它会导致重定向到postLogoutRedirectUrl,如此

  

https://login.microsoftonline.com/MY_TENANT/oauth2/logout?p=my_policy&post_logout_redirect_uri=https%3A%2F%2Fgoogle.com%2F

post logout重定向URI存在于门户网站的重定向Uri中。

如果我停止浏览器并将地址栏中的帖子注销uri更改为https%3A%2F%2Fevil.com%2F,则即使此网址https://evil.com/不在允许的重定向中,重定向仍会正常进行URI。

为什么AD B2C没有停止重定向?这不容易受到漏洞吗?

2 个答案:

答案 0 :(得分:3)

使用Azure AD B2C登录时,B2C服务会将一个令牌发送到" redirect_uri" (该应用程序)。由于令牌需要保持安全,因此B2C服务会要求您将URL发送到的位置列入白名单。

当您退出时,没有任何安全信息从B2C服务传输回应用程序。因此,即使用户被重定向到恶意站点,也不会丢失任何安全措施。

答案 1 :(得分:2)

您可以更改此行为,以强制Azure AD B2C仅在将有效ID令牌作为参数传入注销请求中时才处理重定向重定向。若要使B2C自动包含ID令牌并检查其是否存在,只需在Azure门户中编辑您的登录/注册策略,即:

enter image description here

或者,如果您使用自定义策略,则可以将SingleSignOn元素添加到UserJourneyBehaviors部分,并将EnforceIdTokenHintOnLogout设置为true,即:

<UserJourneyBehaviors>
     <SingleSignOn Scope="Tenant" EnforceIdTokenHintOnLogout="true" />

</UserJourneyBehaviors>