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 }); }); }
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可折叠所有方法 }); } }
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); } }; }); }
static SwaggerPack() { options = SectionManager.GetSection <SwaggerOptions>("Ruichen", "Swagger"); }
public object Deserialize() => m_RegistrySectionManager.GetSection();