C# 在WebApi中实现IAAuthenticationFilter
我有一个WebAPI,其中有一些控制器 现在,我将在我的web api中实现基于令牌的安全性。 令牌正在我们的数据库中生成。 我想用这个令牌验证操作。 我正在考虑使用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
这里有什么帮助吗?您可以通过本主题实现过滤器
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);
}
}
}