0

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

Authorization: our-token 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");

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

编辑:

我也试过:

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

其中属性只是属性:

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

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

编辑2:

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

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

在 Swagger UI 开始将所有方法显示为安全之后,因此它确实分析它实际上是AuthorizeAttribute,而不仅仅是 Attribute

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

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

4

1 回答 1

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

于 2019-07-16T17:40:20.480 回答