Asp.net web api 支持API密钥认证的Swagger网络

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

我们在WebAPI应用程序中使用令牌身份验证。每个调用(除了获取密钥的方法)都使用相同的模式

授权:我们的令牌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有所不同,以解释有趣的。。。闻起来像虫子