Asp.net mvc 5 指定重定向时AAD身份验证后的无限重直接循环

Asp.net mvc 5 指定重定向时AAD身份验证后的无限重直接循环,asp.net-mvc-5,azure-active-directory,openid-connect,adal,katana,Asp.net Mvc 5,Azure Active Directory,Openid Connect,Adal,Katana,如果我在OpenIdConnectAuthenticationOptions中指定重定向URI,如下所示 app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { ClientId = clientId, Authority = Authority, Post

如果我在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中的所有Replay url,并且只为测试服务器保留设置,并删除上面的“RedirectUri=RedirectUri”,那么我的问题就消失了

我这里有一个小提琴手日志:

看起来,当AAD的请求返回到我的应用程序时,在令牌被抓取和使用之前,中间件只是用302将其弹回。同样重要的是,我在路由和返回uri指向的mvc控制器上有[Authorize]属性。如果我删除它,我不会得到这个问题

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


谢谢你的帮助

我找到了解决问题的办法。最初我是指定我的回复url指向站点的根。我的路由配置如下所示:

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Welcome", action = "Index", id = UrlParameter.Optional }
        );
如果我在回复url的末尾加上“Welcome”(欢迎),它就可以工作了。出于某种原因,如果我将回复url保留到站点的根目录,并选择默认路由,那么它将进入无限循环

我还发现,这只适用于站点的子应用程序。我尝试将我的应用程序移动到iis中的独立站点,这样就不必在回复url中添加控制器名称

示例:
原始回复url: mysite.mydomain.com/CustomApp

新回复url: mysite.mydomain.com/CustomApp/Welcome

希望其他人能发现这个有用

更新


我发现问题的根源仍然是这个mvc5错误:katanaproject.codeplex.com/workitem/197。我以为它已经被修复了,但还没有,所以我将继续使用著名的Kentor Owin Cookie Saver:github.com/Sustainsys/Owin Cookie Saver

通过对CookieSecureOption使用从不选项解决

app.UseCookieAuthentication(new CookieAuthenticationOptions()
            {
                CookieSecure = CookieSecureOption.Never
            })

我试图重现您的问题,但失败了,您能否提供更多详细信息帮助我们重现,如果您未指定RedirectUri参数的任何值,该参数将被忽略,Azure AD将选择在注册时注册的参数。@Nayu MSFT感谢您的评论。我忘了补充一点,这个应用程序是作为iis中主网站的子应用程序设置的,所以是“mainsite.com/thisApp”。当它在本地运行时,它是作为一个独立的应用程序运行的,我没有得到re-direct错误。你认为这可能是问题的一部分吗?另外,注册的第一个uri是localhost版本,然后我手动将第二个回复url的测试服务器url路径添加到AAD中。这有帮助吗?@NanYu MSFT我能够做更多的测试并发现更多的细节(见上文),主要是,当IsAuthenticated属性返回到应用程序时,在身份验证后被设置为false,但我不明白为什么它在我的本地应用程序上能完美工作!我发现问题的根源仍然是由以下mvc5错误引起的:。我以为它已经被修复了,但还没有,所以我将继续使用著名的Kentor Owin Cookie保护程序:从NuGet和app.UseKentorOwinCookieSaver()添加
Kentor.OwinCookieSaver
应用程序之前使用CookieAuthentication(新的CookieAuthenticationOptions())为我做了一件好事-谢谢!嘿,很高兴这有帮助!使用最新版本的ASP.Net,您不再需要使用Kentor.OwinCookieSaver,我认为他们最终修复了4.6.x版本中的一个错误。您认为我需要更新哪个库?我假设我只是在几周前设置了这个,我将运行最新的,但它仍然显示这个bug。还有,你对这个问题有什么想法吗