我刚刚在我的WebAPI项目中安装了Swashbuckle,到目前为止一直很好,尽管python-path
api端点是公共的。
我只想允许访问我的移动应用开发者。如何隐藏密码或在此处要求表格身份验证?
答案 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");