自定义redirectUrl

时间:2016-11-20 08:01:48

标签: asp.net-mvc oauth-2.0 owin azure-active-directory openid-connect

我有一个ASP.Net MVC应用程序,我也使用Azure Active Directory身份验证(owin身份验证)。

我的网站网址是' http://example.com'我的租户已经配置了重定向网址到' http://www.example.com'。

            app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = Authority,
                PostLogoutRedirectUri = "http://www.example.com",
                RedirectUri = "http://www.example.com",

                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    AuthorizationCodeReceived = (context) =>
                    {
                        var code = context.Code;
                        return Task.FromResult(0);
                    }
                }
            });

当我尝试使用此配置时,我会在“AuthorizationCodeReceived”'事件,但此事件被多次调用,直到AAD错误抛出。调试我的应用程序时,除了AAD错误页面之外,我没有收到任何错误。 我不明白这里有什么问题,相同的配置正在使用WSFederation身份认证机制。

我怎样才能实现这一目标?因为我被迫发布身份验证会将其重定向到www.example.com'他们来的也不重要。

注意:我曾尝试使用重定向网址' example.com',但它确实有效。但是,我很想知道上面的设置发生了什么?

  1. example.com(网站网址) - > example.com(AAD RedirectURL)=工作
  2. www.example.com(网站网址) - > www.example.com(AAD RedirectURL)=作品
  3. example.com(网站网址) - > www.example.com(AAD RedirectURL)=没有工作
  4. 解决方案:根据用户输入的网址使用动态网址

    RedirectToIdentityProvider = (context) =>
                        {
                            string appBaseUrl = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase;
                            context.ProtocolMessage.RedirectUri = appBaseUrl;
                            context.ProtocolMessage.PostLogoutRedirectUri = appBaseUrl;
                            return Task.FromResult(0);
                        },
    

1 个答案:

答案 0 :(得分:0)

当我们将Azure Active Directory与OAuth 2.0OpenId connect protocol集成时,我们可以将 redirect_uri 参数发送到Azure Active Directory。 Azure Active Directory将使用您在门户上注册的值来验证它。 授权端点的此参数为 recomend ,这意味着当应用程序仅具有唯一 redirect_uri 时,它也可以不使用此参数。

只有当我们发送此参数时值与门户网站上的值匹配时,Azure Active Directory才会向 redirect_uri 发送正确的响应,否则它将发送错误消息{{1 }}。您可以使用 Fiddler 捕获请求和响应,以获取Azure Active Directory返回的详细错误消息。

在这种情况下,您的应用程序具有不同的域。我们需要在门户网站上注册所有这些内容,并按照您的提法动态指定当前应用程序使用的域。

更新

  1. 将网络应用程序发布到Azure,然后我们可以通过Azure提供的默认域(A)访问Web应用程序
  2. 为此网络应用添加自定义域名(B)
  3. 将redrect_uri从A修改为B
  4. 访问域名为A的网络应用
  5. 从Azure AD登录Web应用程序
  6. 使用用户登录成功将网络应用重定向到域B