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();

齐活~~~~~~~!
再次运行看效果

输入对应的账号密码即可。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
