2

私は、特定のクエリーストリングのセットを返すように認証しているOpenID Connectサーバーがある場合のシナリオを処理しようとしています。条件が一致すると、基本的にユーザーを「アクセスが拒否されました」ページにリダイレクトする必要があります。どんな理由であれ、リダイレクトを含むコメント行は実際には決して発動しません。後にしていることを行うためのより良い/異なる方法がありますか?ここで.NETのリダイレクトOpenID Connectミドルウェア?

はOpenIDの接続ミドルウェアは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

関連する問題