学习ASP.NET Core的身份认证(基于Session的身份认证3)

开源博客项目Blog中提供了另一种访问控制方式,其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式,测试程序中直接复用开源博客项目Blog中的相关类及接口定义,并在其上调整判断逻辑。
  首先是接口AllowAccessAttribute,用于标识函数是否需要访问控制。

csharp 复制代码
[AttributeUsage(AttributeTargets.Method)]
public class AllowAccessAttribute : Attribute
{}

然后定义特定类AuthorizationAttribute ,用于标识并处理指定控制器类的访问控制,在类中实现OnAuthorization函数,这里调整了原博客项目Blog的访问控制逻辑(Blog项目使用基于Cookie的身份认证,其在函数内使用HttpContext.User相关信息进行登录判断),函数的输入参数AuthorizationFilterContext中包含有待访问的控制器类及函数信息(如下截图所示),可以据此做更详细的访问控制。

csharp 复制代码
public class AuthorizationAttribute : Attribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        bool ignore = ((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo.GetCustomAttributes(false).Any(f => f is AllowAccessAttribute);
        if (!ignore)
        {
            if (!context.HttpContext.Session.IsAvailable ||
                string.IsNullOrEmpty(context.HttpContext.Session.GetString("user")))
            {
                context.Result= new RedirectToRouteResult(
                            new RouteValueDictionary
                            {
                                { "controller", "Account" },
                                { "action", "Login" }     
                            });
                return;
            }
        }
    }
}

在测试项目中的使用示例如下所示,最终程序的运行效果是访问Home/Privacy可以直接看到页面,放在Home/Index的话,如果没有登录则跳转到登录页面。

csharp 复制代码
[Authorization]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        ViewData.Add("CurUser", HttpContext.Session.GetString("user"));
        return View();
    }
    
    [AllowAccess]
    public IActionResult Privacy()
    {
        return View();
    }
}

参考文献:

[1]https://www.cnblogs.com/boonya/p/18557417

[2]http://www.pzhseo.com/article/dipjeg.html

[3]https://cloud.tencent.com/developer/article/1783650

[4]https://blog.csdn.net/ousetuhou/article/details/135392012

[5]https://blog.51cto.com/u_16213593/11106992

[6]https://blog.csdn.net/weixin_30371469/article/details/97157033

相关推荐
安 当 加 密1 小时前
中小学教室多媒体电脑安全登录解决方案
数据安全·访问控制·身份认证·日志审计·多因素认证·操作系统登录双因素认证
安 当 加 密17 小时前
【安当产品应用案例100集】032-重塑企业SaaS平台的PostgreSQL凭据管理体系
数据库·数据安全·访问控制·身份认证·加密技术·凭据管理
棉晗榜3 天前
.net core在linux导出excel,System.Drawing.Common is not supported on this platform
linux·excel·asp.net core·miniexcel
棉晗榜3 天前
asp.net core发布配置端口号,支持linux
asp.net core
coredx5 天前
如何优雅地让 ASP.NET Core 支持异步模型验证
asp.net core
core51210 天前
flink yarn模式3种提交任务方式
flink·yarn·任务·session·提交·方式·应用模式
岁岁岁平安12 天前
JavaWeb学习(4)(四大域、HttpSession原理(面试)、SessionAPI、Session实现验证码功能)
java·学习·javaweb·session·httpsession
小乖兽技术13 天前
ASP.NET Core Web 项目的部署:选择 IIS 还是 Kestrel?
后端·kestrel·iis·asp.net·asp.net core
界面开发小八哥15 天前
DevExtreme JS & ASP.NET Core v24.2新功能预览 - 全新的聊天组件
javascript·ui·asp.net core·界面控件·ui开发·devextreme·.net 9