クラスを使用してIAuthorizationFilter
すべての要求をフィルター処理し、認証 Cookie にカスタム ユーザー クレームがまだ存在する (マルチテナント アプリ) かどうかを確認します。これらの情報は、アプリケーションの残りの部分に不可欠です。これらの情報が存在しない場合は、ログイン ページにリダイレクトされます。
public class TokenAuthorizationFilter : IAuthorizationFilter, IAsyncAuthorizationFilter
{
public TokenAuthorizationFilter()
{
// Some dependency injection ...
}
public void OnAuthorization(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
{
CheckToken(context);
}
public Task OnAuthorizationAsync(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
{
return CheckToken(context);
}
}
そして、このようにフィルターを登録します
services.AddMvc(config =>
{
config.Filters.Add(typeof(TokenAuthorizationFilter));
});
そして、私がアクセスしたいコントローラのアクションは非常に単純です:
[Authorize(Policy = "TokenValid")]
public class HomeController : AjaxBaseController
{
public IActionResult Index()
{
return View();
}
}
のポリシーにも達していませんAuthorizeAttribute
。スタック トレースでわかるように、Identity はMicrosoft.AspNet.Identity.SignInManager
をチェックした後、ミドルウェアのどこかにを作成しようCookieAuthenticationOptions
としています。私たちのアプリケーションではログインは非常に特殊なので、Identity がユーザーを自動的にログに記録することは望ましくありません。認証 Cookie の有効期限が切れたときに、この問題を再現できます。何か案は ?ありがとう !