有没有办法在Basic Auth属性后面输入SwashBuckle文档页面?因此,只有拥有正确用户名和密码的用户才能看到文档页面。
swashbuckle配置了
GlobalConfiguration.Configuration.EnableSwagger
和
.EnableSwaggerUi
但它会创建自己的MessageHandler,因此我无法附加我的Basic Auth属性,该属性以ActionFilterAttribute
的形式实现。
我也不希望将基本身份验证应用于整个网站,只需将swagger端点
答案 0 :(得分:4)
如果我说得对,那么你的情况可能与此类似(image)(image)。 这就是我所做的事情&工作:
public class AddAuthorizationHeaderParameterOperationFilter: IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline();
var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);
var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
var basicAuthenticator = apiDescription.ActionDescriptor.GetCustomAttributes<MyBasicAuthenticator>().Any();
//because the attribute might be at controller or action method
var myTokenAuthenticator = apiDescription.GetControllerAndActionAttributes<MyTokenAuthenticator>().Any();
//actionname: certain controllers
if (isAuthorized != null)
{
if (operation != null)
{
if (operation.parameters == null)
{
operation.parameters = new List<Parameter>();
}
if (myTokenAuthenticator)
{
operation.parameters.Add(new Parameter()
{
name = "Authorization",
@in = "header",
description = "Id obtained from the service method authenticate. Ex: MyToken ID",
required = true,
type = "string"
});
}
if (basicAuthenticator)
{
operation.parameters.Add(new Parameter()
{
name = "Authorization",
@in = "header",
type = "string",
description = "basic http authentication. Ex: Basic (Email:Password).ToBase64",
@required = true
});
}
}
}
}
}
类似问题: swashbuckle q.
答案 1 :(得分:0)
在尝试解决这个问题时,并没有找到答案,找到了想要的东西。
重复一个问题:如何使用您选择的身份验证限制swagger ui页面,需要登录等。
答案:Web.config位置授权
将以下位置添加到您的web.config中(如果设置了不同的基本路径,则更改swagger)
<configuration>
<location path="swagger">
<system.web>
<authorization>
<allow roles="api"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
上面的允许用户具有'api'角色并限制其他人。
回退到授权模型,拒绝时该做什么。在我的情况下,用户被重定向到登录页面。