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