2

OpenID Connect 서버가 특정 쿼리 문자열 세트를 반환하도록 인증 할 때 시나리오를 처리하려고합니다. 조건이 일치하면 본질적으로 사용자를 "액세스 거부"페이지로 리디렉션하려고합니다. 어떤 이유로 든 리디렉션을 포함하는 주석 처리 된 행은 실제로 발생하지 않습니다. 내가하는 일을하는 데 더 나은/다른 방법이 있습니까? 여기.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를 호출하지 않아야 () 리다이렉트 (redirect)하기 전에, HTTP 파이프 라인에서 요청을 처리하는 것을 "중지"하라. 다음으로 변경하십시오 :

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

불행히도 그 트릭을하지 않습니다. 사용자는 여전히 리디렉션되지 않습니다. – ianpoley

관련 문제