Swagger-Net支持API密钥身份验证

时间:2019-07-16 17:33:50

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

我们在WebAPI应用程序中使用令牌认证。每个调用(获取密钥的其他方法)都使用相同的模式。

Authorization: our-token v01544b7dce-95c1-4406-ad4d-b29202d0776c

我们使用AttributeIActionFilter

实现了身份验证

控制器看起来像这样:

[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");

Swagger UI显示“授权”按钮,我可以将令牌粘贴到弹出窗口的字段中。 但是,没有任何测试通过标头。而且没有方法在其上具有“锁定”图标。

编辑:

我也尝试过:

c.ApiKey("our-token", "header", "Our Token Authentication", typeof(TokenAuthAttribute));

其中属性只是属性:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
    public class TokenAuthAttribute : Attribute
    {
    }

然后,我们使用IActionFilter来检查属性是否应用于方法,这就是我们检查权限的地方。这样做是为了通过DI使用服务。

EDIT2:

我对Attribute的声明方式进行了更改:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
        public class TokenAuthAttribute : AuthorizeAttribute
        {
        }

随后Swagger UI开始显示所有方法均为安全方法,因此它确实分析了实际上是AuthorizeAttribute而不只是属性

之后,它开始像这样放置标头: our-token: ZGV2OnYwMTA2YjZmYjdhLWRlNTUtNDZlNC1hN2Q4LTYxMjgwNTg2M2FiZQ==

应该在哪里: Authorization: our-token GV2OnYwMTA2YjZmYjdhLWRlNTUtNDZlNC1hN2Q4LTYxMjgwNTg2M2FiZQ==

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,您应该有:

c.ApiKey("our-token", "header", "Our Token Authentication", typeof(TokenAuthAttribute));

在适当的位置上,所有标有TokenAuth的操作都应显示一个锁定图标


您可以在我的其中一个中看到它的运行情况:
https://turoapi.azurewebsites.net/swagger/ui/index

后面的代码在这里:
https://github.com/heldersepu/TuroApi/blob/master/TuroApi/App_Start/SwaggerConfig.cs#L67


swagger-net_auth