如果我指定我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