Asp.Net Core 6 Cookie 的身份验证策略

这篇具有很好参考价值的文章主要介绍了Asp.Net Core 6 Cookie 的身份验证策略。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考文献:

http://www.js-code.com/xindejiqiao/xindejiqiao_274882.html

https://www.cnblogs.com/xiaoxiaotank/p/15811749.html

编写代码过程中不理解的代码可参考上面的文献

首先需要配置你的Program.cs,代码如下:

 //在ASP.NET Core应用程序中配置依赖注入容器,将 HttpContextAccessor 注册为一个服务
        builder.Services.AddHttpContextAccessor();

        //选择使用那种方式来身份验证(Cookie)
        builder.Services.AddAuthentication(option =>
        {
            option.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; //默认身份验证方案Cookie
            option.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            option.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            option.DefaultForbidScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            option.DefaultSignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        }).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, option =>
        {
            option.LoginPath = "/Login/AdminLoginView";//如果没有找到用户信息---身份验证失败--授权也失败了---就跳转到指定的Action
            option.AccessDeniedPath = "/Login/AdminLoginView";//访问被拒绝就跳转到指定的Action
        });

然后开启中间件

// 身份认证中间件
app.UseAuthentication();

app.UseAuthorization();

 创建一个AuthenticationMiddleware.cs类

private readonly RequestDelegate _next;

        public AuthenticationMiddleware(RequestDelegate next, IAuthenticationSchemeProvider schemes)
        {
            _next = next;
            Schemes = schemes;
        }

        public IAuthenticationSchemeProvider Schemes { get; set; }

        public async Task Invoke(HttpContext context)
        {
            // 记录原始路径和原始基路径
            context.Features.Set<IAuthenticationFeature>(new AuthenticationFeature
            {
                OriginalPath = context.Request.Path,
                OriginalPathBase = context.Request.PathBase
            });

            // 如果有显式指定的身份认证方案,优先处理(这里不用看,直接看下面)
            var handlers = context.RequestServices.GetRequiredService<IAuthenticationHandlerProvider>();
            foreach (var scheme in await Schemes.GetRequestHandlerSchemesAsync())
            {
                var handler = await handlers.GetHandlerAsync(context, scheme.Name) as IAuthenticationRequestHandler;
                if (handler != null && await handler.HandleRequestAsync())
                {
                    return;
                }
            }

            // 使用默认的身份认证方案进行认证,并赋值 HttpContext.User
            var defaultAuthenticate = await Schemes.GetDefaultAuthenticateSchemeAsync();
            if (defaultAuthenticate != null)
            {
                var result = await context.AuthenticateAsync(defaultAuthenticate.Name);
                if (result?.Principal != null)
                {
                    context.User = result.Principal;
                }
            }

            await _next(context);
        }

在写登录的地方去使用

Asp.Net Core 6 Cookie 的身份验证策略

/// <summary>
        /// 用户登录
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public async Task<ResultDto<int>> AdminLogin(LoginDto dto)
        {
            try
            {
                var model = await _adminRepository.FindAsync(a => a.AdminAccount == dto.LoginName);
                if (model.AdminAccount == null)
                {
                    return new ResultDto<int>
                    {
                        code = 0,
                        data = 2,
                        msg = "用户不存在",
                    };
                }

                bool isCode = Validate2(dto.Id, dto.ValidateCode);
                if (!isCode)
                {
                    return new ResultDto<int>
                    {
                        code = 0,
                        data = 3,
                        msg = "验证码错误"
                    };
                }

                if (model.AdminPassword.ToUpper() == dto.LoginPassword.Md5().ToUpper())
                {
                    var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
                    identity.AddClaims(new[]
                    {
                        new Claim(ClaimTypes.NameIdentifier,model.AdminId.ToString()),//存储登录的角色的AdminId
                        new Claim(ClaimTypes.Name,model.AdminName),//存储登录的角色的AdminName
                    });
                    var principal = new ClaimsPrincipal(identity);

                    // 登录设置项 比如过期时间
                    var properties = new AuthenticationProperties
                    {
                        ExpiresUtc = DateTimeOffset.UtcNow.AddSeconds(60),
                        AllowRefresh = true
                    };

                    await _httpcontext.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, properties);

                    return new ResultDto<int>
                    {
                        code = 0,
                        data = 1,
                        msg = "登陆成功"
                    };
                }
                else
                {
                    return new ResultDto<int>
                    {
                        code = 0,
                        data = 4,
                        msg = "密码错误"
                    };
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

 最后给你的控制器加上[Authorize]特性就可以了。

Asp.Net Core 6 Cookie 的身份验证策略文章来源地址https://www.toymoban.com/news/detail-605155.html

到了这里,关于Asp.Net Core 6 Cookie 的身份验证策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ASP.NET Core 鉴权授权一(简单的Cookie)

    简单的理解:鉴权衡量你能不能进一道门,授权是你进门了可以干什么

    2024年02月03日
    浏览(33)
  • asp.net web api 用户身份验证

            前后端分离的开发中,应用服务需要进行用户身份的验证才允许访问数据。实现的方法很简单。创建一个webapi项目。在App_Start目录下找到WebApiConfig.cs, 在里面增加一个实现类。 Controller 类的实现:

    2024年02月20日
    浏览(38)
  • 【asp.net core】自定义模型绑定及其验证

    水此篇博客,依旧是来自群里的讨论,最后说到了,在方法参数自定义了一个特性,用来绑定模型,优先从Form取,如果为空,或者不存在,在从QueryString中获取并且绑定,然后闲着无聊,就水一篇博客,如果大家有什么需求或者问题,可以找我,很高兴能为你们带来帮助。

    2024年02月03日
    浏览(43)
  • ASP.NET Core 鉴权授权三(添加自定义授权策略)

    此处鉴权给的值是6,授权用的1,尝试访问 基于策略的授权中有一个很重要的概念是Requirements,每一个Requirement都代表一个授权条件。 Requirement需要继承接口IAuthorizationRequirement。 已经内置了一些常用的实现: AssertionRequirement :使用最原始的断言形式来声明授权策略。 DenyAn

    2024年02月03日
    浏览(38)
  • ASP.NET Core Web API之Token验证

    在实际开发中,我们经常需要对外提供接口以便客户获取数据,由于数据属于私密信息,并不能随意供其他人访问,所以就需要验证客户身份。那么如何才能验证客户的什么呢?今天以一个简单的小例子,简述ASP.NET Core Web API开发过程中,常用的一种JWT身份验证方式。仅供学

    2024年02月11日
    浏览(47)
  • ASP.NET Core 鉴权授权三(自定义授权策略、多授权策略、多鉴权架构)

    此处鉴权给的值是6,授权用的1,尝试访问 基于策略的授权中有一个很重要的概念是Requirements,每一个Requirement都代表一个授权条件。 Requirement需要继承接口IAuthorizationRequirement。 已经内置了一些常用的实现: AssertionRequirement :使用最原始的断言形式来声明授权策略。 DenyAn

    2024年02月03日
    浏览(38)
  • ASP.NET CORE WEBAPI 登录 JWT 鉴权 ,接口权限验证

    介绍 当今Web开发中,API的使用越来越广泛,而API的安全性也变得越来越重要。其中,JWT(JSON Web Token)鉴权和授权是一种常见的解决方案。 本篇文章将会介绍JWT鉴权和授权的原理、实现方式以及注意事项。 什么是JWT? JWT是一种基于JSON格式的开放标准(RFC7519),用于在网络

    2023年04月21日
    浏览(62)
  • ASP.NET Core使用JWT+标识框架(identity)实现登录验证

    最近阅读了《ASP.NET Core 技术内幕与项目实战——基于DDD与前后端分离》(作者杨中科)的第八章,对于Core入门的我来说体会颇深,整理相关笔记。 JWT:全称“JSON web toke”,目前流行的跨域身份验证解决方案; 标识框架(identity):由ASP.NET Core提供的框架,它采用RBAC(role

    2024年02月11日
    浏览(44)
  • ASP.NET Core 6框架揭秘实例演示[38]:两种不同的限流策略

    承载ASP.NET应用的服务器资源总是有限的,短时间内涌入过多的请求可能会瞬间耗尽可用资源并导致宕机。为了解决这个问题,我们需要在服务端设置一个阀门将并发处理的请求数量限制在一个可控的范围,即使会导致请求的延迟响应,在极端的情况会还不得不放弃一些请求。

    2024年02月08日
    浏览(50)
  • 在Keycloak中实现多租户并在ASP.NET Core下进行验证

    Keycloak是一个功能强大的开源身份和访问管理系统,提供了一整套解决方案,包括用户认证、单点登录(SSO)、身份联合、用户注册、用户管理、角色映射、多因素认证和访问控制等。它广泛应用于企业和云服务,可以简化和统一不同应用程序和服务的安全管理,支持自托管

    2024年04月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包