2

我試圖處理一個場景,當我通過身份驗證的OpenID Connect服務器返回一組特定的querystrings。當條件匹配時,我希望將用戶重定向到「訪問被拒絕」頁面。無論出於何種原因,包含重定向的下面的註釋行實際上都不會觸發。有沒有更好的/不同的方式來做我以後的事情?在.NET核心OpenID Connect中間件中重定向?

這裏的ID連接中間件是如何在Startup.cs配置:

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:得到它具有以下調整工作:

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

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

您是否嘗試過不調用'context.HandleResponse();'? – Brad

+1

刪除context.HandleResponse()不起作用,並且在用戶轉到回調路徑uri之前用戶仍然沒有最終重定向。 – ianpoley

回答

0

你不應該叫用handleResponse( )在重定向之前,因爲在這種情況下,你「告訴」在HTTP管道中停止處理請求。更改爲:

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

不幸的是,這並不能解決問題。用戶仍然不會重定向。 – ianpoley