如果我指定我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中间件不知道如何设置它为真?
感谢您的帮助!
我尝试重现您的问题但失败了,您能否提供更多详细信息以帮助我们重现该问题:如果未指定任何RedirectUri参数值,则该参数将被省略,Azure AD将选择在注册时注册的参数时间 。 –
@ NanYu-MSFT感谢您的评论。我忘了补充说,这个应用程序是作为iis主要网站的一个子应用程序安装的,因此是“mainsite.com/thisApp”。当它在本地运行时,它会作为独立应用运行,并且我不会收到重新直接的错误。你认为这可能是问题的一部分吗?另外,注册的第一个uri是本地主机版本,然后我手动将我的测试服务器url路径添加到第二个回复URL到AAD中。这些帮助有用? – Mike
@ NanYu-MSFT我能够做更多的测试并发现了一些更多的细节(见上)主要是,虽然IsAuthenticated属性在身份验证后设置为false,但它回到了应用程序中,但我不明白为什么当它完美地在我的本地! – Mike