Example #1
0
        public static void AddJwtSetup(this IServiceCollection services)
        {
            services.AddAuthorization(options =>
            {
                options.AddPolicy("ID", policy => policy.RequireRole("ID").Build());
                options.AddPolicy("IA", policy => policy.RequireRole("IA").Build());
                options.AddPolicy("SystemOrAdmin", policy => policy.RequireRole("IA", "ID"));
            });

            string issue  = AppSettingHelper.App("JWT", "Issue");  // "Issuer";
            string aud    = AppSettingHelper.App("JWT", "Aud");    // "Audience";
            string secret = AppSettingHelper.App("JWT", "Secret"); // "ghgfopkhop gkfdopg kdfpgkdfg dfgkdfg dfgf gfdg";



            services.AddAuthentication(x =>
            {
                //看这个单词熟悉么?没错,就是上边错误里的那个。
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })// 也可以直接写字符串,AddAuthentication("Bearer")
            .AddJwtBearer(o =>
            {
                var keyByteArray = System.Text.Encoding.ASCII.GetBytes(secret);
                var signingKey   = new SymmetricSecurityKey(keyByteArray);

                //var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);

                o.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true, //是否验证Issuer
                    ValidateAudience         = true, //是否验证Audience
                    ValidateIssuerSigningKey = true, //是否验证IssuerSigningKey
                    ValidateLifetime         = true, //是否验证超时  当设置exp和nbf时有效 同时启用ClockSkew

                    ValidIssuer      = issue,        //发行人
                    ValidAudience    = aud,          //订阅人
                    IssuerSigningKey = signingKey,   //参数配置在下边


                    //ClockSkew = TimeSpan.Zero,//这个是缓冲过期时间,也就是说,即使我们配置了过期时间,这里也要考虑进去,过期时间+缓冲,默认好像是7分钟,你可以直接设置为0
                    ClockSkew             = TimeSpan.FromSeconds(30),
                    RequireExpirationTime = true,
                };
            });
        }
Example #2
0
        public static void AddSqlsugarSetup(this IServiceCollection services)
        {
            services.AddScoped <ISqlSugarClient>(o =>
            {
                SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
                {
                    ConnectionString      = AppSettingHelper.App("ConnectionStrings:Default"),//连接符字串
                    DbType                = DbType.SqlServer,
                    IsAutoCloseConnection = true,
                    InitKeyType           = InitKeyType.Attribute,//从特性读取主键自增信息

                    // 自定义特性
                    ConfigureExternalServices = new ConfigureExternalServices()
                    {
                        EntityService = (property, column) =>
                        {
                            if (column.IsPrimarykey && property.PropertyType == typeof(int))
                            {
                                column.IsIdentity = true;
                            }
                        }
                    }
                });

                //添加Sql打印事件,开发中可以删掉这个代码
                db.Aop.OnLogExecuting = (sql, pars) =>
                {
                    var res = sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
                    MiniProfiler.Current.Step($"执行的sql: {++i} \r\n {res}");
                    //MiniProfiler.Current.Step($"{res}");

                    Console.WriteLine($"生成的sql {i}:\r\n");
                    Console.WriteLine(res);
                    Console.WriteLine();
                };


                return(db);
            });
        }