当前位置: 首页 > 知识库问答 >
问题:

将基本身份验证添加到swagger ui,以便锁定文档页面

蒙经纶
2023-03-14

.Net Framework 4.6.1,类库项目(Web API)

我已经将swagger/swashbuckle nuget添加到项目中,并将SwaggerConfig.cs文件添加到我的App_Start文件夹中。

SwaggerConfig.cs的剪报

using System.Web.Http;
using WebActivatorEx;
using MyService;
using Swashbuckle.Application;

[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

然后我继续注册服务

public class SwaggerConfig
{
    public static void Register()
    {
        var thisAssembly = typeof(SwaggerConfig).Assembly;

        GlobalConfiguration.Configuration
            .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "My API");
                    c.IncludeXmlComments(string.Format(@"{0}\swaggerdoc.XML",
                       System.AppDomain.CurrentDomain.BaseDirectory));
                    c.BasicAuth("basicauth").Description("Basic HTTP Authentication");
                })
            .EnableSwaggerUi(c =>
                {
                });
    }
}

但是我不确定在哪里设置了查看文档所需的用户名/密码。API方法都使用令牌进行认证,但是我试图添加一个安全层,通过使用基本的认证来阻止随机用户浏览API文档。

共有2个答案

鞠鸿雪
2023-03-14

要使用基本身份验证保护您的swagger doc,您需要在SwaggerConfig.cs文件中启用它,并在文档或操作级别将其与相应的“安全”属性相结合。

请注意以下来自 SwaggerConfig 的完整注释.cs用于启用基本身份验证:

// You can use "BasicAuth", "ApiKey" or "OAuth2" options to describe security schemes for the API.
// See https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md for more details.
// NOTE: These only define the schemes and need to be coupled with a corresponding "security" property
// at the document or operation level to indicate which schemes are required for an operation. To do this,
// you'll need to implement a custom IDocumentFilter and/or IOperationFilter to set these properties
// according to your specific authorization implementation
//
c.BasicAuth("basic").Description("Basic HTTP Authentication");

如何将其与相应的“安全”属性耦合?您可以添加一个类来实现该过滤器:

public class SwaggerHeaderFilter : IOperationFilter
{

    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline();
        // check if authorization is required
        var isAuthorized = filterPipeline
            .Select(filterInfo => filterInfo.Instance)
            .Any(filter => filter is IAuthorizationFilter);
        // check if anonymous access is allowed
        var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
        if (isAuthorized && !allowAnonymous)
        {
            if (operation.security == null)
                operation.security = new List<IDictionary<string, IEnumerable<string>>>();
            var auth = new Dictionary<string, IEnumerable<string>>
                 {
                    {"basic", Enumerable.Empty<string>()}
                };
            operation.security.Add(auth);
        }
    }
}

在swaggerConfig.cs文件中,将其添加到配置中:

c.OperationFilter<SwaggerHeaderFilter>();

并且不要忘记使用[Authorize]标签装饰您的Api

参考:https://codingsight.com/swashbuckle-swagger-configuration-for-webapi/

濮阳国兴
2023-03-14

如果你想保护文档,你必须在Web服务器本身上做到这一点,对于.net 4.x,我假设IIS。

您使用的方法旨在告诉Swagger显示用户名/密码登录表单,以使用这些带有基本HTTP授权标头的凭据调用服务endpoint。

 类似资料:
  • 我一直在尝试使用最新版本的SpringMVC实现来设置Swagger Spring-MVC和Swagger UI:Swagger Spring-MVC 我已经能够使初始设置正常工作,但当我导航到我的SwaggerUI页面时,我收到一个错误,它无法访问我的api,因为“服务器返回未定义”。当我查看firebug时,它说它得到了401授权。 当您第一次导航到SwaggerUI URL时,会弹出一个对话

  • 要求: Spring启动应用程序与Spring狐狸 将基本身份验证添加到 Swagger 传递所有其他请求 代码:已实现 然而,这段代码无法工作-您可以自由浏览/炫耀ui。html#/没有任何授权。 问题是-为什么BASIC身份验证和用户不适用于swagger uiendpoint?

  • 问题内容: 从HttpClient 4.3开始,我一直在使用HttpClientBuilder。我正在连接到具有基本身份验证的REST服务。我将凭据设置如下: 但是,这不起作用(我正在使用的REST服务返回401)。怎么了? 问题答案: 从此处的 抢先身份验证 文档中: http://hc.apache.org/httpcomponents-client- ga/tutorial/html/aut

  • 问题内容: 我有angularjs应用程序,用户在其中输入保存到数据库的数据,然后在服务器端将其编译为pdf文件。所有访问都需要适当的身份验证标头。填充所需的数据后,用户可以按按钮保存数据,然后检索pdf文件。理想情况下,我在我的angularjs应用中调用)。这可以正常工作并在另一个窗口中打开,但是如何向此请求添加身份验证标头?以我的理解,我无法下载pdf并使用ajax进行打印,因此我缺少此身份

  • 我最近将一个Spring Boot应用程序从V1.5更新到V2.0.3。它是一个具有作为RESTendpoint公开的方法的应用程序,并通过基本的HTTP身份验证加以保护。用户名和密码硬编码在应用程序加载的属性文件中。 自更新以来,响应时间增加了近200ms,处理请求的98%时间花费在BasicAuthenticationFilter.doFilter()中。 更具体地说,需要花费时间对请求中的密

  • 目前我正在开发一个Java工具,它应该可以更新Confluence服务器页面。使用Curl一切都像一个符咒,但是当使用Postman或Java代码(HttpClient Java11)时,我得到了一个 HTTP状态401–未经授权 反应。 在下面的语句中使用curl curl--basic-u user:password-X PUT-H“内容类型:application/json”-d“@test