C# 在WebApi中实现IAAuthenticationFilter

C# 在WebApi中实现IAAuthenticationFilter,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个WebAPI,其中有一些控制器 现在,我将在我的web api中实现基于令牌的安全性。 令牌正在我们的数据库中生成。 我想用这个令牌验证操作。 我正在考虑使用IAAuthenticationFilter实现它。 但我不明白我该怎么做 这里有什么帮助吗?您可以通过本主题实现过滤器 public class TokenAuthenticate : Attribute, IAuthenticationFilter { public bool AllowMultiple

我有一个WebAPI,其中有一些控制器

现在,我将在我的web api中实现基于令牌的安全性。 令牌正在我们的数据库中生成。 我想用这个令牌验证操作。 我正在考虑使用IAAuthenticationFilter实现它。 但我不明白我该怎么做


这里有什么帮助吗?

您可以通过本主题实现过滤器

public class TokenAuthenticate : Attribute, IAuthenticationFilter
    {

        public bool AllowMultiple
        {
            get
            {
                return false;
            }
        }

        public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
        {
            try
            {
                IAuthService _authService = context.ActionContext.ControllerContext.Configuration
                                  .DependencyResolver.GetService(typeof(IAuthService)) as IAuthService;

                HttpRequestMessage request = context.Request;
                AuthenticationHeaderValue authorization = request.Headers.Authorization;

                if (authorization == null)
                {
                    context.ErrorResult = new AuthenticationFailureResult("Missing autorization header", request);
                    return;
                }
                if (authorization.Scheme != "Bearer")
                {
                    context.ErrorResult = new AuthenticationFailureResult("Invalid autorization scheme", request);
                    return;
                }
                if (String.IsNullOrEmpty(authorization.Parameter))
                {
                    context.ErrorResult = new AuthenticationFailureResult("Missing Token", request);
                    return;
                }

                Boolean correctToken = await _authService.ValidateTokenAsync(authorization.Parameter);
                if(!correctToken)
                    context.ErrorResult = new AuthenticationFailureResult("Invalid Token", request);
            }
            catch (Exception ex)
            {
                context.ErrorResult = new AuthenticationFailureResult("Exception: \n" + ex.Message, context.Request);
            }
        }

    }