我已经在我的asp.net web api项目中覆盖了IautheticationFIlter。这是我的班级:
public class TokenAuthentication : Attribute, IAuthenticationFilter
{
private readonly string realm;
public bool AllowMultiple { get { return false; } }
public TokenAuthentication(string realm)
{
this.realm = "realm=" + realm;
}
public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
{
var request = context.Request;
// Receive token from the client. Here is the example when token is in header:
var token = request.Headers.GetValues("Token").ElementAt(0);
...
}
return Task.FromResult(0);
}
public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
{
context.Result = new ResultWithChallenge(context.Result, realm);
return Task.FromResult(0);
}
}
现在我需要排除登录控制器的身份验证:
当我运行我的项目时,如果我放置[Authorize],[AllowAnonymous]或根本没有过滤器,那么每个请求都会删除此代码。
这是我添加过滤器的地方:
public static void RegisterHttpFilters(System.Web.Http.Filters.HttpFilterCollection filters)
{
filters.Add(new TokenAuthentication(""));
}
答案 0 :(得分:0)
我认为,您混淆了身份验证和授权。您可能希望将登录控制器排除在授权范围之外 [Authorize]和[AllowAnonymous]属性在授权上下文中使用,与身份验证无关。这就是每次调用IAuthenticationFilter的原因 这篇文章也很有用http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api。