2

Ich versuche, ein Szenario zu behandeln, wenn der OpenID Connect-Server, für den ich mich authentifiziere, einen bestimmten Satz von Querystrings zurückgibt. Wenn die Bedingung übereinstimmt, möchte ich den Benutzer im Wesentlichen auf eine Seite "Zugriff verweigert" umleiten. Aus welchen Gründen auch immer wird die kommentierte Zeile, die die Weiterleitung enthält, niemals tatsächlich ausgelöst. Gibt es eine bessere/andere Art zu tun, wonach ich suche?Umleiten in .NET Core OpenID Connect Middleware?

Hier ist, wie die OpenID Connect-Middleware in Startup.cs konfiguriert ist:

services.Configure<OpenIdConnectOptions>(options => 
{ 

    // ... 

    options.Events = new OpenIdConnectEvents 
    { 
     OnMessageReceived = context => 
     { 
      if (context.HttpContext.Request.Query.ContainsKey("error")) 
      { 
       context.HandleResponse(); // <-- Fires 
       context.Response.Redirect("/AccessDenied"); // <-- Redirect fires but user is not redirected 
      } 

      return Task.FromResult(0); 
     } 
    } 
} 

UPDATE: Verstanden mit den folgenden Verbesserungen arbeiten:

options.Events = new OpenIdConnectEvents 
{ 
    OnRemoteFailure = context => 
    { 
     context.HandleResponse(); 
     context.Response.Redirect("AccessDenied?error=" + context.Failure.Message); 

     return Task.FromResult(0); 
    }, 
    // ... 
}; 
+0

Haben Sie versucht, nicht aufzurufen 'context.HandleResponse();'? – Brad

+1

Das Entfernen von context.HandleResponse() hat keine Auswirkungen, und der Benutzer wird immer noch nicht umgeleitet, bevor der Benutzer zum Rückrufpfad uri weitergeleitet wird. – ianpoley

Antwort

0

Sie sollten nicht handle anrufen () vor der Weiterleitung, wie in diesem Fall "sagen", um die Verarbeitung der Anfrage in HTTP-Pipeline zu stoppen. Ändern Sie dazu:

 if (context.HttpContext.Request.Query.ContainsKey("error")) 
     { 
      context.Response.Redirect("/AccessDenied"); 
      context.HandleResponse(); 
     } 
+1

Leider funktioniert das nicht. Der Benutzer wird immer noch nicht umgeleitet. – ianpoley

Verwandte Themen