Swagger和WebAPI(Swashbuckle) - 将/ swagger端点设为私有?

时间:2016-08-04 01:09:11

标签: asp.net-web-api swagger swashbuckle

我刚刚在我的WebAPI项目中安装了Swashbuckle,到目前为止一直很好,尽管python-path api端点是公共的。

我只想允许访问我的移动应用开发者。如何隐藏密码或在此处要求表格身份验证?

3 个答案:

答案 0 :(得分:1)

我通过以下方式实现了这一目标:

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
        string username = null;
        if (Thread.CurrentPrincipal.Identity != null && Thread.CurrentPrincipal.Identity.Name != null) {
            username = Thread.CurrentPrincipal.Identity.Name.ToLower();
        }
        if (IsSwagger(request) && username != "Admin") {
            var response = request.CreateResponse(HttpStatusCode.Unauthorized);
            return Task.FromResult(response);
        }
        else {
            return base.SendAsync(request, cancellationToken);
        }
    }

    private bool IsSwagger(HttpRequestMessage request) {
        return request.RequestUri.PathAndQuery.StartsWith("/swagger");
    }

答案 1 :(得分:0)

如果您的项目在IIS下托管,则可以在IIS网站上使用Windows(对站点文件夹具有适当的访问权限)或basic authentication,并禁用匿名身份验证。

答案 2 :(得分:0)

@bsoulier的回答非常合理。另一种方法是使用JavaScript / AJAX。

我没有尝试保护实际的swagger-ui索引页面,因为大多数时候端点上的身份验证都足够了。

但是,可以轻松地将任何JavaScript注入index页面,也可以使用自己的自定义index页面。这意味着您可以使用您想要的任何身份验证。只需创建一个简单的HTML表单并使用AJAX进行调用以登录用户,然后再允许他们查看任何内容或在将其重定向到真正的swagger-ui页面之前。

将JavaScript文件从SwaggerConfig注入swagger-ui页面:

c.InjectJavaScript(thisAssembly, "Your.Namespace.testScript1.js");

将自定义索引页面注入SwaggerConfig的swagger-ui页面:

c.CustomAsset("index", containingAssembly, "Your.Namespace.index.html");