开源DDD设计模式框架YMNNetCoreFrameWork第二篇-增加ASp.net core Identity身份认证,JWT身份认证

1、框架增加Identity注册功能

2、框架增加identity登录以后获取JWTtoken

3、请求接口通过token请求,增加验证特性

源代码地址:https://github.com/topgunymn/YMNNetCoreFrameWork

JWTtoken生成代码:

 private string CreateAccessToken(IEnumerable<Claim> claims, TimeSpan? expiration = null)
        {
            var now = DateTime.UtcNow;
            SymmetricSecurityKey symmetricSecurityKey =   new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration.GetSection("Authentication:JwtBearer")["SecurityKey"].ToString()));
            var jwtSecurityToken = new JwtSecurityToken(
                issuer: _configuration.GetSection("Authentication:JwtBearer")["Issuer"].ToString(),
                audience: _configuration.GetSection("Authentication:JwtBearer")["Audience"].ToString(),
                claims: claims,
                notBefore: now,
                expires:now.AddMinutes(30),
                // expires: now.Add(expiration ?? _configuration.Expiration),  SecurityKey
                signingCredentials: new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256)
            );

            return new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
        }

JWT认证配置代码:

services.AddIdentity<YMNUser, Role>()
  .AddEntityFrameworkStores<YMNContext>() ;
            //services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            // //添加jwt验证:
            // .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
            // {
            services.AddAuthentication(options =>
            {
                     //identity.application
                     var a = options.DefaultAuthenticateScheme;
                var b = options.DefaultChallengeScheme;
                options.DefaultAuthenticateScheme = "JwtBearer";
                options.DefaultChallengeScheme = "JwtBearer";
            }).AddJwtBearer("JwtBearer", options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateLifetime = true,//是否验证失效时间
                    ClockSkew = TimeSpan.FromSeconds(30),

                    ValidateAudience = true,//是否验证Audience
                                            //ValidAudience = Const.GetValidudience(),//Audience
                                            //这里采用动态验证的方式,在重新登陆时,刷新token,旧token就强制失效了
                    AudienceValidator = (m, n, z) =>
                  {
                      return m != null && m.FirstOrDefault().Equals(Audience);
                  },
                    ValidateIssuer = true,//是否验证Issuer
                    ValidIssuer = Issuer,//Issuer,这两项和前面签发jwt的设置一致

                    ValidateIssuerSigningKey = true,//是否验证SecurityKey
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key))//拿到SecurityKey
                };
                //options.Events = new JwtBearerEvents
                //{
                //    OnAuthenticationFailed = context =>
                //    {
                //        //Token expired
                //        if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
                //        {
                //            context.Response.Headers.Add("Token-Expired", "true");
                //        }
                //        return Task.CompletedTask;
                //    }
                //};
            });

原文地址:https://www.cnblogs.com/topguntopgun/p/12268314.html

时间: 2025-01-21 01:56:33

开源DDD设计模式框架YMNNetCoreFrameWork第二篇-增加ASp.net core Identity身份认证,JWT身份认证的相关文章

开源DDD设计模式框架YMNNetCoreFrameWork第一篇

DDD设计模式:仓储.领域模型.应用层.聚合根.事件总线,以业务模型驱动设计,从数据模型驱动脱离,不用关心数据库设计,开发效率更高 DDD领域驱动设计模型概念不再讲解,直接上技术 框架搭建: 如图所示, Host是程序的路口,用来配置项目的 Application,是应用层,为用户提供接口 Core,领域模型层 EntityFrameWorkCore,基础设施层,提供仓储,数据库迁移, 源代码地址:https://github.com/topgunymn/YMNNetCoreFrameWork

开源DDD设计模式框架YMNNetCoreFrameWork第四篇-增加YMNSession,增加异常处理,增加策略授权

1.增加YMNSession,可以获取当前登录的用户信息 2.增加异常处理,不要使用过滤器,过滤器只能获取到mvc异常 3.增加策略授权,策略授权支持用户角色.用户名授权,初步实现 代码地址:https://github.com/topgunymn/YMNNetCoreFrameWork 获取当前登录用户信息 [HttpPost("Login")] public async Task<object> Login(string name, string password) {

开源DDD设计模式框架YMNNetCoreFrameWork第五篇-Swagger增加权限认证

配置文件services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v0.1.0",//版本号 Title = "尹大师框架说明,QQ:1390788386",//文档标题 Description = "框架说明文档",//文档描述 Contact = new OpenApiContact { Name = "道法自

Django框架之第二篇

Django框架之第二篇 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中). views:视图函数 另加urls:url路径与视图函数的映射关系,,可以不是一一对应的. 2.相关的一些命令 创建一个Django项目:django-admin  startproject  projectname 创建一个项目下的应用:python3  manage.py  startapp  appn

【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6)

目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策略(MVC5+EF6) [第四篇]ASP.NET MVC快速入门之完整示例(MVC5+EF6) [番外篇]ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6) 请关注三石的博客:http://cnblogs.com/sanshi 数据库连接字符串 上一篇文章中,我们使用MVC的

如何增加Asp.Net Core生成的模板网站中用户信息表中的列(AspNetUsers)

环境: 1.VS2015 Community 14.0.25431.01 Update 3; 2.其他环境(具体哪一个影响不太清楚,都列在这儿) 使用的系统模板 利用系统提供的模板,并选择个人身份验证.如图: 问题: 模板提供的身份认证数据库中的AspNetUsers表,需要根据需要增加列.以下图为例,绿色框中的列都是模板默认的,我要增加一列(以Test为例). 解决过程: 刚刚接触MVC.EF的概念,不知道如何操作.查阅了大量资料后发现,网上大部分类似内容都是基于mvc3的,最后还是在stac

(C/C++)基于SharpUI控件库的插件式框架开发--第二篇可停靠管理

一个软件,不可能只有一个文档界面,会有多个甚至几十二,比如一些浏览器.文档查看等都是多个标签页的形式,在C#中开源的可停靠管理的常用的是Xceed.Wpf.AvalonDock:但是用C/C++开发的开源停靠管理库是没找到,没办法只能自己写一个了. 图1 可停靠管理项目名XPDock,其中所有控件的样式存放在“.bin\layout\Theme\Controls\XPDock.xml”:如图2: 图2 在XPDock控件中,DockingManager为控件主要控件,控件内定义添加视图方法Add

SpringMVC框架之第二篇

6.参数绑定(重点) Springmvc作为表现层框架,是连接页面和service层的桥梁,它负责所有请求的中转.怎么从请求中接收参数是重点,这也体现了我们刚开始说的Springmvc的第一个作用:“接收请求中的参数”. 接收的参数具体有哪些类型呢?6.1~6.5是绝大部分参数绑定的类型,还有两种第二天课程讲. 6.1.简述参数绑定的类型 1.默认支持的参数类型:HttpServletRequest,HttpServletResponse,HttpSession,Model 2.简单类型:Str

Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)

江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就到了弹匣最底部的位置,最后压入的子弹在弹匣顶部.发射子弹的时候每次将弹匣顶部的子弹弹出发射.无法越过顶部子弹发射下面的子弹. 栈(stack)是限定仅在表尾进行插入和删除操作的线性表,LIFO 队列就跟上学那会儿排队打饭一样,但是不能加塞儿. 队列(queue)是只允许在队列一端进行插入操作,另一端进行删除操