OverrideAuthentication属性が機能していませんか?ASP.NET MVC 5.
-
20-12-2019 - |
質問
私はASP.NET MVC 5アプリケーションで実装しようとしているスーパーシンプルな認証属性を持っています。コントローラ内の特定のアクション(ログインフォームとホームページなど)を除いて、属性をグローバルに適用したいです。
運さない[OverrideAuthentication]
属性を使用してアクションを飾ってみました。アプリケーションがまだログインフォームで認証を実行しているため、リダイレクトループエラーが表示され、オーバーとオーバーオースのログインフォームに戻すようにしてください。
他の誰かがこの行動を見ましたか?私がここに詰め込んだのはどんな考えですか?
例として、現在、現在未実装のスーパーシンプルフィルタを作成しました。
public class BasicAuthenticationAttribute
: ActionFilterAttribute, IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext filterContext)
{
throw new NotImplementedException();
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
{
throw new NotImplementedException();
}
}
.
私がこのようなコントローラを飾る場合:
[BasicAuthentication]
public class AccountController : Controller
{
[HttpGet]
[OverrideAuthentication]
public ActionResult Login()
{
return View();
}
}
.
そのアクションが認証コードをまったく実行していない場合でも、ログインアクションに移動したときに実装されていない例外を取得します。オーバーライドがどのように機能することになっているか誤解しましたか?
解決
私はあなたが認証と混乱していると思います(たくさんの人がしています)。認証がログイン時にのみ起こり、リクエストには発生しないため、[基本的な認証採用]を作成してグローバルに登録することは意味がありません。
承認は、ユーザーが特定の行動を実行するために必要な特権を持っているかどうかを確認するために、ユーザーがログインした後に行われたものであり、グローバルに許可を実行するのは理にかなっています。MVCの承認は[AuthorizeTtribute]によって処理され、許可検査の方法をカスタマイズする必要がある場合は継承できます。グローバルフィルタとして登録することもできます。
[AllowNonymousAttribute]は[AuthorizeTtribute]と組み合わせて機能し、基本的に認証チェックをスキップするように指示します。[AuthorizeTtribute]で使用されていない限り、[AllowNonymousAttribute]は効果がないことに注意してください。