Exemple #1
0
        public static void AddSwaggerServices(this IServiceCollection services)
        {
            string apiName = SectionManager.GetSection("Ruichen", "Name");

            services.AddSwaggerGen(c =>
            {
                options.Endpoints.ForEach(point =>
                {
                    c.SwaggerDoc(point.Version, new OpenApiInfo
                    {
                        Version     = point.Version,
                        Title       = $"{apiName} 接口文档-{RuntimeInformation.FrameworkDescription}",
                        Description = $"{apiName} HTTP API v1 卢立法",
                        Contact     = new OpenApiContact
                        {
                            Name  = "Github个人地址",
                            Email = "*****@*****.**",
                            Url   = new Uri("https://github.com/lulifa")
                        },
                        License = new OpenApiLicense
                        {
                            Name = "Gitee个人地址",
                            Url  = new Uri("https://gitee.com/lulifa")
                        }
                    });
                });
                string xmlPath = Path.Combine(AppContext.BaseDirectory, "RuichenCore.Api.xml");
                c.IncludeXmlComments(xmlPath, true);
                //开启加权小锁
                c.OperationFilter <AddResponseHeadersFilter>();
                c.OperationFilter <AppendAuthorizeToSummaryOperationFilter>();

                //在header中添加token,传递到后台中
                c.OperationFilter <SecurityRequirementsOperationFilter>();

                // Jwt Bearer认证 必须是oauth2
                c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
                {
                    Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey
                });
            });
        }
Exemple #2
0
 public static void UseSwaggerMid(this IApplicationBuilder app, Func <Stream> streamHtml)
 {
     if (options.Enabled)
     {
         app.UseSwagger();
         app.UseSwaggerUI(c =>
         {
             string apiName = SectionManager.GetSection("Ruichen", "Name");
             options.Endpoints.ForEach(point =>
             {
                 c.SwaggerEndpoint(point.Url, point.Name);
             });
             c.RoutePrefix = options.RoutePrefix;
             if (options.MiniProfiler)
             {
                 c.IndexStream = streamHtml;
             }
             c.DefaultModelsExpandDepth(-1);    //设置为 - 1 可不显示models
             c.DocExpansion(DocExpansion.None); //设置为none可折叠所有方法
         });
     }
 }
Exemple #3
0
        public static void AddBeaerJwtServices(this IServiceCollection services)
        {
            string issuer   = SectionManager.GetSection("Ruichen", "Jwt", "Issuer");
            string audience = SectionManager.GetSection("Ruichen", "Jwt", "Audience");
            string secret   = SectionManager.GetSection("Ruichen", "Jwt", "Secret");
            SymmetricSecurityKey securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
            SigningCredentials   credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

            TokenValidationParameters tokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey         = securityKey,
                ValidateIssuer           = true,
                ValidIssuer           = issuer,
                ValidateAudience      = true,
                ValidAudience         = audience,
                ValidateLifetime      = true,
                ClockSkew             = TimeSpan.FromSeconds(30),
                RequireExpirationTime = true
            };

            services.AddAuthentication(o =>
            {
                o.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                o.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
                o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(o =>
            {
                o.TokenValidationParameters = tokenValidationParameters;
                o.Events = new JwtBearerEvents
                {
                    OnChallenge = context =>
                    {
                        context.Response.Headers.Add("Token-Error", context.ErrorDescription);
                        return(Task.CompletedTask);
                    },
                    OnAuthenticationFailed = context =>
                    {
                        string token = context.Request.Headers["Authorization"].ToString();
                        if (token != null)
                        {
                            token = token.Replace("Bearer ", string.Empty);
                        }
                        else
                        {
                            token = string.Empty;
                        }
                        JwtSecurityToken jwtSecurityToken = new JwtSecurityTokenHandler().ReadJwtToken(token);
                        if (jwtSecurityToken.Issuer != issuer)
                        {
                            context.Response.Headers.Add("Token-Error-Iss", "issuer is wrong");
                        }
                        if (jwtSecurityToken.Audiences.All(item => item != audience))
                        {
                            context.Response.Headers.Add("Token-Error-Aud", "audience is wrong!");
                        }
                        if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
                        {
                            context.Response.Headers.Add("Token-Expired", "true");
                        }
                        return(Task.CompletedTask);
                    }
                };
            });
        }
Exemple #4
0
 static SwaggerPack()
 {
     options = SectionManager.GetSection <SwaggerOptions>("Ruichen", "Swagger");
 }
 public object Deserialize() => m_RegistrySectionManager.GetSection();