如何在 dotnet core 中制作自定义身份验证过滤器,如 Iauthentication
Posted
技术标签:
【中文标题】如何在 dotnet core 中制作自定义身份验证过滤器,如 Iauthentication【英文标题】:How to make custom Authentication filter like Iauthentication in dotnet core 【发布时间】:2021-08-26 05:09:36 【问题描述】:我正在将 asp.net mvc 迁移到 dotnet 3.1,在较旧的应用程序中,我们现在在 dotnet 3.1 中使用 IAuthorization 和 IAuthentication 过滤器,我们有 IAuthorization 过滤器,但没有 IAuthentication。 请建议在 dotnet core 3.1 中制作自定义身份验证过滤器的方法。 我们正在使用身份验证方法 OnAuthentication。
public void OnAuthentication(AuthenticationContext filterContext)
if (System.Web.HttpContext.Current.Session.GetString("SUserID") == null && ConfigurationManager.AppSettings["Authentication"] == "Yes")
if(!(filterContext.ActionDescriptor.ActionName== "AuthRequest" || filterContext.ActionDescriptor.ActionName == "AuthResponse" || filterContext.ActionDescriptor.ActionName == "Sessiontimeout"))
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new controller = "Home", action = "AuthRequest", area = string.Empty ));
【问题讨论】:
【参考方案1】:你可以像这样实现过滤器:
public class CustomAuthorizeFilter : ActionFilterAttribute
public override void OnActionExecuting(ActionExecutingContext context)
//check IsAjax request or not
var ajax = context.HttpContext.Request.IsAjaxRequest();
//IsAuthenticated
var result = context.HttpContext.User.Identity.IsAuthenticated;
//check user is in role
var isInRole = context.HttpContext.User.IsInRole(YourRoleName);
//get action and controller Name
var currentContext = context.Resource as AuthorizationFilterContext;
var descriptor = currentContext?.ActionDescriptor as ControllerActionDescriptor;
if (descriptor != null)
var actionName = descriptor.ActionName;
var ctrlName = descriptor.ControllerName;
//and etc
您可以在 OnActionExecuting 中授权您的用户,而对于读取会话,您可以使用 HttpContextAccessor。这是good sample
【讨论】:
以上是关于如何在 dotnet core 中制作自定义身份验证过滤器,如 Iauthentication的主要内容,如果未能解决你的问题,请参考以下文章
在 IdentityServer4 和 Dotnet Core Identity 中使用带有身份验证 (oidc) 的 sms otp
如何在启动时使用 dotnet core 3 中的依赖项调用自定义服务?