Aktivieren von SSL in ASP.NET MVC 5 app-Ergebnisse in OpenIdConnectProtocolValidator Problem
Habe ich eine ASP.NET MVC 5 app, über die die Authentifizierung mit Azure Active Directory. Ich wollte zum aktivieren von SSL auf es über die app. und damit leveraged Globale Filter wie folgt:
public class FilterConfig
{
///<summary>
///Registers the global filters.
///</summary>
///<param name="filters">The filters.</param>
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new RequireHttpsAttribute());
}
}
Danach habe ich auch set 'SSL Aktivieren' in den Projekteigenschaften auf true. Dies gab mir die folgenden SSL-URL -> https://localhost:34567. Ich aktualisierte das Projekt zu haben und diese in der IIS-Express Pfad unter der "Registerkarte Web" unter-Server in 'Projekt-URL'. Allerdings läuft auf der Website, die ich laufen in den folgenden Fehler:
IDX10311: RequireNonce ist 'true' (Standard), aber validationContext.Nonce ist null. Eine nonce kann nicht überprüft werden. Wenn Sie nicht brauchen, um zu überprüfen, die nonce, set OpenIdConnectProtocolValidator.RequireNonce auf 'false'.
Habe ich auth. für die Website aktiviert. Ich verwende Azure Active directory.
Den security-code ist wie folgt:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
});
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Audience = audience,
Tenant = tenant,
});
Den auth. Werte Lesen aus dem web.config und sind wie folgt:
<add key="ida:ClientId" value="<some_guid>" />
<add key="ida:Audience" value="https://localhost:34567/" />
<add key="ida:AADInstance" value="https://login.windows.net/{0}" />
<add key="ida:Tenant" value="microsoft.onmicrosoft.com" />
<add key="ida:PostLogoutRedirectUri" value="https://localhost:34567/" />
Ich habe versucht, RequireNonce auf false, wie verwiesen, der in der Fehlermeldung wie folgt:
ProtocolValidator = new OpenIdConnectProtocolValidator
{
RequireNonce = false
}
Aber dieser gerade ergab einen invalid request-Fehler.
Könnte mir jemand helfen zu verstehen, was das problem hier ist? Es hat alles Super geklappt, bis SSL aktiviert war.
- Denke, ich habe dies aus. Die app. details in Azure AD sind fest verdrahtet, abhängig von der ursprünglichen HTTP-Endpunkt. Aktualisieren Sie diesen, sobald ich die Bestätigung meiner Theorie.
- Ich bekomme dies auch...
- Bitte, hast du es geschafft diesen Fehler beheben kann? Ich bin in der gleichen situation.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Ausnahmen ignorieren, wenn die Fehlermeldung beginnt mit OICE_20004 oder enthält IDX10311. Hinweis: tun Sie es auf Ihr eigenes Risiko.
Aus dem Azure management portal, überprüfen, dass Ihre Anwendung unter den entsprechenden active directory hat die gleichen - Sign-On-URL und Antwort-URL.
Wenn Sie nicht identisch sind, wird diese Fehlermeldung angezeigt.
Dies geschieht, wenn Sie SSL aktivieren, weil es ändert sich nur das Zeichen auf der URL auf die HTTPS-URL, während die Antwort-URL bleibt die gleiche HTTP-URL.
Bearbeiten:
Lesen Sie weiter, wenn Sie genau wissen wollen, warum dies geschieht,
Wenn Sie versuchen, Zugriff auf Ihre app mithilfe des https-URL ist, es setzt ein cookie mit einer eindeutigen Nummer(nonce) in Ihrem browser und trifft Azure AD für die Authentifizierung. Nach der Authentifizierung stellt der browser hat Zugriff auf das cookie. Aber da die Zeichen auf URL und Antwort-URL sind die verschiedenen browser nicht erkennen, Ihre app und keinen Zugriff auf das cookie und damit die Anwendung löst diese Fehlermeldung.
Kann ich reproduzieren diesen Fehler durch drücken der zurück-Taste paar mal auf meine web-Anwendung, auch nach erfolgreicher Anmeldung.
können Sie versuchen, diese 2 Dinge:
in Ihrem folgenden code:
hinzufügen-Protokoll-validator als auf der Authentifizierungs-Optionen, wie das, was Fehler schlagen vor:
oder fügen Sie die Benachrichtigung, indem Sie diese fangen können diese Fehler und leiten Sie zu einigen Fehler-Seite. Ich tun, um es anmutig. Bis Katana Menschen behoben werden.
Schaffe ich es dieses problem umgehen, mithilfe der folgenden Methode in der Global.asax-Datei. Zumindest diese zeigen nicht die Ausnahme an den client. Ich benutze ELMAH zum abfangen von Ausnahmen.
Gut wahrscheinlich ist es am besten zu schauen, die katana-source-code, ich fand den Typ der Ausnahme zu OpenIdConnectProtocolInvalidNonceexception also ich handle es so.
Habe ich diese Ausnahme popup auf Browsern, die cache-Seiten und Benutzer, klicken Sie auf die zurück-Taste nach der Anmeldung.
Das Problem hier ist einfach... hat mich Stunden, um dies herauszufinden.
Da war ich Tests auf meinem lokalen hatte keine https-und um die Wahrheit zu sagen, wenn zunächst die Erstellung meiner app in der Azure-AD-da war ich erwartet es zu sein https bei meinem test habe ich es plain-http (replyUrl HomePage-Url, Logout-all that jazz)
Dann danach traf ich die infinate loop Problem eine Menge Leute bekommen. so dann habe ich beschlossen, zu verhöhnen, das cert auf meinem lokalen und ja, entledigte sich die infinate umleiten, aber dann brachte ein anderer der "IDX10311: RequireNonce ist 'true' " eine
Lange Geschichte kurz zu machen... deine AzureAD App https in all seinen Endpunkten. und wallah!
Nur das hinzufügen von einem anderen Fall, ich lief einfach in: das Netzwerk Sie eine Verbindung herstellen zu können werden ändern von HTML-Inhalten.
Kunde genannt, mit einem Problem: er konnte nicht daran vorbei, Fehler. Es war ein neues laptop, wo er nicht angemeldet vorher. Nach etwa einer Stunde versucht mehrere mögliche Lösungen, die ich beschlossen zu prüfen, die Netzwerk er verbunden war.
Es stellt sich heraus, er war mit einem Netzwerk verbunden, in einem Flughafen, offenen und ungesicherten und nicht mit einem VPN-Dienst (fehlen einige SETA dort). Ich weiß nicht genau, wer bedient das Netzwerk-oder das, was Sie Taten, aber die Azure AD-Dienst muss erkannt haben, eine gewisse Art der Manipulation mit der nonce.
Dem moment der Benutzer eine Verbindung zu einem vertrauenswürdigen Netzwerk, das Problem war gelöst.
@zb3b Antwort + @jonmeyer Antwort: