2017-08-04 18 views
2

"古い" ASP.NETでは、カスタム認可属性を作成してHandleUnauthorizedRequestを上書きすることができました。私はカスタム認証ハンドラを使用してASP.NET Coreでこれを行うことはできません。後者は「成功」または「失敗」のいずれかであり、障害の性質に基づいて代替コントローラのアクションにリダイレクトしたいと考えています。Asp.netコア認可が失敗した場合に指定されたパスにリダイレクト

ここにシナリオがあります。私のウェブアプリケーションのユーザは、彼らが「アクティブ」なユーザ、つまり完全に登録されており、その詳細などを確認したことを示すクレームを持っています。新しいユーザはOpenIdConnectミドルウェアを使って認証されました。そのアカウントの「アクティブ」なユーザークレームは持っていません。したがって、新規ユーザーとアクティブユーザーの両方が認証されています。私は新しいユーザーがほとんどのアプリケーションにアクセスするのを防ぎたい。彼らがhttps://app.example.com/dashboardに行くことを試みるたびに、私はhttps://app.example.com/newuserページにそれらをリダイレクトしたい、そして、彼らはセットアッププロセスを経ることができる。

コントローラに認可ポリシーを使用して、「アクティブな」ユーザークレームの存在を確認し、アクセスを許可することができます。新しいユーザーがこの主張を持っておらず、承認に失敗した場合、私は認可ハンドラーにアクセスしているアプリケーションの領域にリダイレクトするロジックを持たせたい。しかし、ASPNETコアの認証フレームワークを使用してこれを行う方法はわかりません。 https://github.com/aspnet/Mvc/issues/4890を参照してください -

はCookieMiddlewareを使用し、OnRedirectToAccessDeniedイベントのハンドラを実装し、やや不格好なソリューションがあります。私はまた、すべての要求に対して実行されるアクションフィルタの実装について考えました。

は、私はちょうどここに愚かなことですか?確かに、認証の失敗に対して何らかのアクションを実行し、ユーザーを再認証して再認証するだけではないことが理にかなっています。

答えて

3

私の質問に対する簡単な答えは、Author Filterを作成することです。Pro ASP.NET Core MVC(第6版、Adam Freeman)を参照してください。これは、1つのメソッドOnAuthorization(AuthorizationFilterContextコンテキスト)を使用してIAuthorizationFilterを実装します。この方法では、リクエストを確認するために必要な作業を行います。私のケースでは、RedirectToActionResultでは、認証に失敗した場合はcontext.ResultプロパティをIActionResultに設定します。要求が許可を渡す場合は何もしないでください。幻想 -

また、フィルタに依存性注入を使用することができます。

Microsoft ASP.NETドキュメントサイトでIAuthorizationFilterのサンプルを実装またはコーディングする方法は記載されていません。アダム・フリーマンに感謝します。

関連する問題