如何排除控制器的身份验证

时间:2014-03-10 06:15:47

标签: asp.net asp.net-web-api authorization action-filter

我已经在我的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(""));
    }

1 个答案:

答案 0 :(得分:0)

我认为,您混淆了身份验证授权。您可能希望将登录控制器排除在授权范围之外 [Authorize]和[AllowAnonymous]属性在授权上下文中使用,与身份验证无关。这就是每次调用IAuthenticationFilter的原因 这篇文章也很有用http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api