Asp.net web api 支持API密钥认证的Swagger网络
我们在WebAPI应用程序中使用令牌身份验证。每个调用(除了获取密钥的方法)都使用相同的模式Asp.net web api 支持API密钥认证的Swagger网络,asp.net-web-api,swagger,swagger-net,Asp.net Web Api,Swagger,Swagger Net,我们在WebAPI应用程序中使用令牌身份验证。每个调用(除了获取密钥的方法)都使用相同的模式 授权:我们的令牌v01544b7dce-95c1-4406-ad4d-b29202d0776c 我们使用Attribute和IActionFilter 控制器看起来是这样的: [RoutePrefix("api/tms/auth")] public class AuthController : BaseController { public ISecurityServic
授权:我们的令牌v01544b7dce-95c1-4406-ad4d-b29202d0776c
我们使用Attribute
和IActionFilter
控制器看起来是这样的:
[RoutePrefix("api/tms/auth")]
public class AuthController : BaseController
{
public ISecurityService SecurityService { get; set; }
[TokenAuth]
[Route("logout")]
[HttpPost]
public HttpResponseMessage Logout()
{
try
{
this.SecurityService.InvalidateAccessToken(this.StaticContextWrapperService.AccountId, token, HttpContext.Current.Request.UserHostAddress);
// Return OK status
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (LoginException le)
{
return this.LogoutFailureResponse(le.Message);
}
}
private HttpResponseMessage LogoutFailureResponse(string message)
{
return new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new StringContent(message, Encoding.UTF8, "text/plain")
};
}
}
Swagger配置具有以下功能:
c.ApiKey("our-token", "header", "Our Token Authentication");
大摇大摆的用户界面显示“授权”按钮,我可以将令牌粘贴到弹出窗口的字段中。
但是,在任何测试中都没有通过头。并且没有方法上有“锁定”图标
编辑:
我还尝试:
c.ApiKey("our-token", "header", "Our Token Authentication", typeof(TokenAuthAttribute));
其中属性仅为属性:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class TokenAuthAttribute : Attribute
{
}
然后我们使用IActionFilter检查属性是否应用于方法,这就是我们检查权限的地方。这样做是为了通过DI使用服务
编辑2:
我更改了属性的声明方式:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class TokenAuthAttribute : AuthorizeAttribute
{
}
之后,than Swagger UI开始将所有方法显示为安全的,因此它确实分析了它实际上是AuthorizeAttribute
,而不仅仅是属性
之后,它开始这样放置标题:
我们的代币:ZGV2OnYwMTA2YjZmYjdhLWRlNTUtNDZlNC1hN2Q4LTYxMjgwNTg2M2FiZQ==
应在哪里:
授权:我们的令牌GV2OnYwMTA2YjZmYjdhLWRlNTUtNDZlNC1hN2Q4LTYxMjgwNTg2M2FiZQ==
如果我没有弄错,您应该:
c.ApiKey("our-token", "header", "Our Token Authentication", typeof(TokenAuthAttribute));
有了它,所有标记为TokenAuth
的操作都应该显示一个锁图标
你可以在我的一本书中看到它的作用:
其背后的代码如下:
我刚刚对我的原始帖子进行了编辑。我认为它不会那样工作,我们的属性不是
AuthorizeAttribute
。我在想,在swagger net config中添加行只会将所需的头添加到所有调用中,而不会尝试进入并分析我们用于授权的方法和代码。如果它不使用typeof(TokenAuthAttribute)
这可能是一个bug。。。你能在GitHub上创建一个小项目来复制它吗?看看这是否与操作上的额外标记有关。。。要测试,请创建一个不带RoutePrefix的普通控制器,并且只使用TokenAuth
的操作,看看这是否会使添加的EDIT2有所不同,以解释有趣的。。。闻起来像虫子