C# swagger ui增加访问限制方式
作者:C_24910
本文介绍了如何在C#中使用Swagger UI并增加访问限制,通过创建`SwaggerBasicAuthMiddleware`类和`MiddlewareExtension`类,并在`Startup.cs`的`Configure`方法中注入`app.UseSwaggerBasicAuth()`,从而实现对Swagger页面的访问控制
C# swagger ui增加访问限制
swagger 页面是个很好的接口文档,可以直接给三方系统查看参考,如果所有人都能访问有一些风险
只需要三部解决。不废话,直接上代码
1、增加SwaggerBasicAuthMiddleware.cs类
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using VOL.Core.Configuration; using VOL.Core.DBManager; using VOL.Core.Extensions; using VOL.Entity.DomainModels; public class SwaggerBasicAuthMiddleware { private readonly RequestDelegate next; public SwaggerBasicAuthMiddleware(RequestDelegate next) { this.next = next; } /// <summary> /// 验证账号密码 /// </summary> /// <param name="userName">账号</param> /// <param name="passWorld">密码</param> /// <returns></returns> public bool Login(string userName, string passWorld) { var EncryptPwd = passWorld.EncryptDES(AppSetting.Secret.User);//密码加密 return DBServerProvider.DbContext.Set<Sys_User>().Where(s => s.UserName == userName && s.UserPwd == EncryptPwd).Any(); } public async Task InvokeAsync(HttpContext context) { if (context.Request.Path.StartsWithSegments("/swagger")) { string authHeader = context.Request.Headers["Authorization"]; if (authHeader != null && authHeader.StartsWith("Basic")) { // Get the credentials from request header var header = AuthenticationHeaderValue.Parse(authHeader); var inBytes = Convert.FromBase64String(header.Parameter); var credentials = Encoding.UTF8.GetString(inBytes).Split(':'); var username = credentials[0]; var password = credentials[1]; // validate credentials if (Login(username, password)) { await next.Invoke(context).ConfigureAwait(false); return; } } //告知服务器端需要进行Basic认证 context.Response.Headers["WWW-Authenticate"] = "Basic"; context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; } else { await next.Invoke(context).ConfigureAwait(false); } } }
可以将login方法换成你需要的校验,我这里直接用系统的账号密码做的校验
2、增加MiddlerwareExtention.cs类
using Microsoft.AspNetCore.Builder; /// <summary> /// 中间件拓展类 /// </summary> public static class MiddlerwareExtention { public static IApplicationBuilder UseSwaggerBasicAuth(this IApplicationBuilder app) { return app.UseMiddleware<SwaggerBasicAuthMiddleware>(); } }
3、在Startup.cs的Configure方法
注入app.UseSwaggerBasicAuth();
齐活~~~~~~~!
再次运行看效果
输入对应的账号密码即可。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。