commit
32cacd58d7
20 changed files with 410 additions and 0 deletions
@ -0,0 +1,3 @@ |
||||
*.csproj |
||||
bin/ |
||||
obj/ |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
||||
Subproject commit d276266da5d8f4b9bb4b5dc9e88ddd2e21c62f94 |
@ -0,0 +1,27 @@ |
||||
using Microsoft.AspNetCore.Hosting; |
||||
using Microsoft.Extensions.Configuration; |
||||
using Microsoft.Extensions.Hosting; |
||||
using Microsoft.Extensions.Logging; |
||||
using NLog.Web; |
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using System.Threading.Tasks; |
||||
|
||||
namespace PEIS.Interface |
||||
{ |
||||
public class Program |
||||
{ |
||||
public static void Main(string[] args) |
||||
{ |
||||
CreateHostBuilder(args).UseNLog().Build().Run(); |
||||
} |
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) => |
||||
Host.CreateDefaultBuilder(args) |
||||
.ConfigureWebHostDefaults(webBuilder => |
||||
{ |
||||
webBuilder.UseStartup<Startup>(); |
||||
}); |
||||
} |
||||
} |
@ -0,0 +1,167 @@ |
||||
using Microsoft.AspNetCore.Authentication.JwtBearer; |
||||
using Microsoft.AspNetCore.Builder; |
||||
using Microsoft.AspNetCore.Hosting; |
||||
using Microsoft.Extensions.Configuration; |
||||
using Microsoft.Extensions.DependencyInjection; |
||||
using Microsoft.Extensions.Hosting; |
||||
using Microsoft.IdentityModel.Tokens; |
||||
using Microsoft.OpenApi.Models; |
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.IO; |
||||
using System.Reflection; |
||||
using System.Text; |
||||
using PEIS.Common.Helper.Encryption; |
||||
using PEIS.Common.Middleware; |
||||
|
||||
namespace PEIS.Interface |
||||
{ |
||||
public class Startup |
||||
{ |
||||
|
||||
public Startup(IConfiguration configuration) |
||||
{ |
||||
Configuration = configuration; |
||||
} |
||||
|
||||
private readonly bool _swagger = AppSettingJsonHelper.GetSection("Swagger", "Using") == "true"; |
||||
public IConfiguration Configuration { get; } |
||||
|
||||
/// <summary> |
||||
/// 这个方法被运行时调用。 使用此方法向容器添加服务 |
||||
/// </summary> |
||||
/// <param name="services"></param> |
||||
public void ConfigureServices(IServiceCollection services) |
||||
{ |
||||
services.AddControllers(); |
||||
services.AddControllersWithViews() |
||||
.AddNewtonsoftJson(options => |
||||
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore |
||||
); |
||||
// swagger 配置 |
||||
if (_swagger) |
||||
{ |
||||
services.AddSwaggerGen(c => |
||||
{ |
||||
c.SwaggerDoc("v1", new OpenApiInfo { Title = "OutCollect", Version = "v1" }); |
||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; |
||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); |
||||
c.IncludeXmlComments(xmlPath, true); |
||||
|
||||
//添加Authorization |
||||
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme |
||||
{ |
||||
Description = "JWT Authorization header using the Bearer scheme.", |
||||
Name = "Authorization", |
||||
In = ParameterLocation.Header, |
||||
Scheme = "bearer", |
||||
Type = SecuritySchemeType.Http, |
||||
BearerFormat = "JWT" |
||||
}); |
||||
//把所有方法配置为增加bearer头部信息; |
||||
c.AddSecurityRequirement(new OpenApiSecurityRequirement |
||||
{ |
||||
{ |
||||
new OpenApiSecurityScheme |
||||
{ |
||||
Reference = new OpenApiReference |
||||
{ |
||||
Type = ReferenceType.SecurityScheme, |
||||
Id = "bearerAuth" |
||||
} |
||||
}, |
||||
new string[] {} |
||||
} |
||||
}); |
||||
|
||||
c.AddSecurityRequirement(new OpenApiSecurityRequirement |
||||
{ |
||||
{ |
||||
new OpenApiSecurityScheme |
||||
{ |
||||
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } |
||||
}, |
||||
new List<string>() |
||||
} |
||||
}); |
||||
}); |
||||
} |
||||
// jwt 配置 |
||||
services.AddAuthentication(options => |
||||
{ |
||||
// 设置默认使用jwt验证方式 |
||||
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; |
||||
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; |
||||
}).AddJwtBearer(options => |
||||
{ |
||||
var confSection = Configuration.GetSection("Authentication"); |
||||
options.TokenValidationParameters = new TokenValidationParameters() |
||||
{ |
||||
// 验证接收者 |
||||
ValidateAudience = true, |
||||
// 验证发布者 //是否验证发行人,就是验证载荷中的Iss是否对应ValidIssuer参数 |
||||
ValidateIssuer = true, |
||||
// 验证过期时间//是否验证过期时间,过期了就拒绝访问 |
||||
ValidateLifetime = true, |
||||
// 验证秘钥 //是否验证签名,不验证的画可以篡改数据,不安全 |
||||
ValidateIssuerSigningKey = true, |
||||
// 读配置Issuer//发行人 |
||||
ValidIssuer = confSection["IsSure"], |
||||
// 读配置Audience//订阅人 |
||||
ValidAudience = confSection["Audience"], |
||||
// 设置生成token的秘钥 //解密的密钥 |
||||
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(confSection["SecurityKey"])) |
||||
}; |
||||
}); |
||||
|
||||
} |
||||
|
||||
|
||||
/// <summary> |
||||
/// 此方法由运行时调用。 使用此方法配置 HTTP 请求管道 |
||||
/// </summary> |
||||
/// <param name="app"></param> |
||||
/// <param name="env"></param> |
||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) |
||||
{ |
||||
if (env.IsDevelopment()) |
||||
{ |
||||
app.UseDeveloperExceptionPage(); |
||||
} |
||||
else |
||||
{ |
||||
app.UseExceptionHandler("/error"); |
||||
} |
||||
|
||||
if (_swagger) |
||||
{ |
||||
app.UseSwagger(); |
||||
// Enable middleware to serve generated Swagger as a JSON endpoint. |
||||
app.UseSwagger(c => |
||||
{ |
||||
c.SerializeAsV2 = true; |
||||
}); |
||||
app.UseSwaggerUI(c => |
||||
{ |
||||
c.SwaggerEndpoint("/swagger/v1/swagger.json", "debug NetFL v1"); |
||||
}); |
||||
|
||||
} |
||||
|
||||
app.UseHttpsRedirection(); |
||||
app.UseRouting(); |
||||
|
||||
|
||||
// custom jwt auth middleware |
||||
app.UseMiddleware<JwtMiddleware>(); |
||||
// jwt |
||||
app.UseAuthentication(); |
||||
app.UseAuthorization(); |
||||
|
||||
app.UseEndpoints(endpoints => |
||||
{ |
||||
endpoints.MapControllers(); |
||||
}); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,9 @@ |
||||
{ |
||||
"Logging": { |
||||
"LogLevel": { |
||||
"Default": "Information", |
||||
"Microsoft": "Warning", |
||||
"Microsoft.Hosting.Lifetime": "Information" |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,18 @@ |
||||
{ |
||||
"Logging": { |
||||
"LogLevel": { |
||||
"Default": "Information", |
||||
"Microsoft": "Warning", |
||||
"Microsoft.Hosting.Lifetime": "Information" |
||||
} |
||||
}, |
||||
"AllowedHosts": "*", |
||||
"Authentication": { |
||||
"IsSure": "OutCollect", |
||||
"Audience": "OutCollectColoud", |
||||
"SecurityKey": "4C6A8A8B-1B9F-12E7-60C4-123BC0BB5D25" |
||||
}, |
||||
"Swagger": { |
||||
"Using": "true" |
||||
} |
||||
} |
Loading…
Reference in new issue