1

如果我指定我OpenIdConnectAuthenticationOptions重定向URI像这样无限重定向循环重定向

app.UseOpenIdConnectAuthentication(
      new OpenIdConnectAuthenticationOptions 
      { 
       ClientId = clientId, 
       Authority = Authority, 
       PostLogoutRedirectUri = postLogoutRedirectUri, 
       RedirectUri = redirectUri, 

       Notifications = new OpenIdConnectAuthenticationNotifications() 
       { 
        AuthenticationFailed = context => 
        { 
         context.HandleResponse(); 
         context.Response.Redirect("/Error?message=" + context.Exception.Message); 
         return Task.FromResult(0); 
        } 
       } 
      }); 

然后我得到一个无限重定向循环。这只发生在我把它放在独立的IIS服务器(我们的测试服务器)上。如果我删除了AAD中的所有重播网址,并且只保留了测试服务器的设置,并从上面删除了“RedirectUri = redirectUri”,我的问题就消失了。

我这里有一个小提琴手日志:https://drive.google.com/file/d/0B5Ap95E_wdyAa0RLLWloZ0dCaGM/view?usp=sharing

看来,当从AAD要求回来我的应用程序,该令牌抓住和使用前,中间件只是反弹是正确的背部采用了302。另外可能很重要的是,我拥有路由和返回uri指向的mvc控制器上的[Authorize]属性。如果我删除它,我不会得到这个问题。

[更新] 我试着将应用程序移动到IIS的本地主机安装,而不是使用iisexpress,这样我就可以像安装在我的iis服务器上那样安装一个子应用程序。在我的本地主机上,它执行相同的无限循环。我在一些遥测自定义事件中添加了[Authorize]属性,并且已经能够发现在认证后将页面重定向回应用httpContext.user.identity.IsAuthenticated = false。那么OWIN中间件不知道如何设置它为真?

感谢您的帮助!

+0

我尝试重现您的问题但失败了,您能否提供更多详细信息以帮助我们重现该问题:如果未指定任何RedirectUri参数值,则该参数将被省略,Azure AD将选择在注册时注册的参数时间 。 –

+0

@ NanYu-MSFT感谢您的评论。我忘了补充说,这个应用程序是作为iis主要网站的一个子应用程序安装的,因此是“mainsite.com/thisApp”。当它在本地运行时,它会作为独立应用运行,并且我不会收到重新直接的错误。你认为这可能是问题的一部分吗?另外,注册的第一个uri是本地主机版本,然后我手动将我的测试服务器url路径添加到第二个回复URL到AAD中。这些帮助有用? – Mike

+0

@ NanYu-MSFT我能够做更多的测试并发现了一些更多的细节(见上)主要是,虽然IsAuthenticated属性在身份验证后设置为false,但它回到了应用程序中,但我不明白为什么当它完美地在我的本地! – Mike

回答

1

我能找到我的问题的解决方案。最初我指定我的回复网址指向网站的根目录。我的路由配置看起来像这样:

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Welcome", action = "Index", id = UrlParameter.Optional } 
     ); 

如果我追加“欢迎”到我的回复url的结尾它的作品。由于某种原因,如果我将回复网址留在网站的根目录下,并且收到默认路由,则会进入无限循环。

我也发现这只适用于网站的子应用程序。我尝试将我的应用程序移到iis中作为独立站点,而不是在回复url中添加控制器名称。

例子:
回复原文网址: mysite.mydomain.com/CustomApp

新回复网址: mysite.mydomain.com/CustomApp/Welcome

希望别人能找到这个有用!

+0

我发现问题的根源仍然是由此mvc5错误引起的:https://katanaproject.codeplex.com/workitem/197。我认为它已被修复,但没有,所以我会继续使用着名的Kentor Owin Cookie Saver:https://github.com/Sustainsys/owin-cookie-saver – Mike