C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# swagger ui增加访问限制

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

齐活~~~~~~~!

再次运行看效果

输入对应的账号密码即可。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文