zoukankan      html  css  js  c++  java
  • XiaoQi.Study 之 .net core webapi (二)

    1、EF Core 使用的补充

      1) 创建 接口 IEFCoreService

      2)   实现 接口 EFCoreService

      3) 在Startup.cs 中注册 ef 服务 并在控制器中注入使用 (这种方式不规范,只是对其基本使用的一些操作)

      注册服务代码

      services.AddScoped<IEFCoreService, EFCoreService>();

    2、创建鉴权用到的类

    //存放文件夹
    AuthHelper
    //api 返回处理器
    ApiResponseHandler
    //api 返回类型
    ApiResponseType

    //jwt 授权处理器
    JwtAuthorizationHandler          这个类需要在Startup.cs 注册以下内容            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    //jwt 授权认证资源
    JwtAuthorizationRequirement
    //颁发 token 解析 token
    JwtHelper
    // 生成token 需要的实体 用户id 和角色
    JwtTokenModel
    // 用户角色 和 其拥有的url 资源
    JwtUserRoleInfo

    3、配置策略授权

         // 授权验证的资源
                var jwtKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("xiaoqiyaozouxiaoqiyaozouxiaoqiyaozou"));//加密验证的key         
                var jwtCreds = new SigningCredentials(jwtKey, SecurityAlgorithms.HmacSha256); //根据key' 生成的标识
                var jwtUserRoleInofs = new List<JwtUserRoleInfo>();//用户角色和用户拥有的api 集合 ,该角色只能访问其拥有的api         
                var jwtRequirement = new JwtAuthorizationRequirement(
                    jwtUserRoleInofs,
                    "",
                    ClaimTypes.Role,
                    expiration: TimeSpan.FromSeconds(60 * 60),
                    "",
                    "Issuer",
                    "Audience",
                    jwtCreds
                    );
                //注册策略授权
                services.AddAuthorization(o =>
                {
                    o.AddPolicy("MyPolicy", policy => policy.Requirements.Add(jwtRequirement));
                })
           services.AddSingleton(jwtRequirement);//将该资源注册,可以在验证处理器种设置其值

    4、配置验证异常处理器以及权限验证处理器

             //验证参数设置
                var tokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = jwtKey,
                    ValidateIssuer = true,
                    ValidIssuer = "Issuer",//发行人
                    ValidateAudience = true,
                    ValidAudience = "Audience",//订阅人
                    ValidateLifetime = true,
                    ClockSkew = TimeSpan.FromSeconds(30),
                    RequireExpirationTime = true,
                };
    
                // 开启Bearer认证
                services.AddAuthentication(o => {
                    o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
                    o.DefaultChallengeScheme = nameof(ApiResponseHandler);
                    o.DefaultForbidScheme = nameof(ApiResponseHandler);
                })
                 // 添加JwtBearer服务
                 .AddJwtBearer(o =>
                 {
                     o.TokenValidationParameters = tokenValidationParameters;
                     o.Events = new JwtBearerEvents
                     {
                         OnAuthenticationFailed = context =>
                         {
                             // 如果过期,则把<是否过期>添加到,返回头信息中
                             if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
                             {
                                 context.Response.Headers.Add("Token-Expired", "true");
                             }
                             return Task.CompletedTask;
                         }
                     };
                 })
                 .AddScheme<AuthenticationSchemeOptions, ApiResponseHandler>(nameof(ApiResponseHandler), o => { });
    
                // 注入权限处理器
                services.AddScoped<IAuthorizationHandler, JwtAuthorizationHandler>();

    5、jwt 验证的个人理解图

      

      

  • 相关阅读:
    刷题总结——宠物收养所(bzoj1208)
    算法复习——trie树(poj2001)
    刷题总结——bzoj2243染色
    算法复习——虚树(消耗战bzoj2286)
    设置SSH自动登陆(免密码,用户名)
    自旋锁Spin lock与互斥锁Mutex的区别
    如何去除Linux文件的^M字符
    重构
    比赛日程安排
    基于libzip的简易压缩(zip)/解压缩(unzip)程序
  • 原文地址:https://www.cnblogs.com/xiaoqiyaozou/p/12484121.html
Copyright © 2011-2022 走看看