// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading; using System.Threading.Tasks; using System.Web.Http.Filters; namespace System.Web.Http { /// Represents an authentication attribute that authenticates via OWIN middleware. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] public sealed class HostAuthenticationAttribute : Attribute, IAuthenticationFilter { private readonly IAuthenticationFilter _innerFilter; private readonly string _authenticationType; /// Initializes a new instance of the class. /// The authentication type of the OWIN middleware to use. public HostAuthenticationAttribute(string authenticationType) : this(new HostAuthenticationFilter(authenticationType)) { _authenticationType = authenticationType; } internal HostAuthenticationAttribute(IAuthenticationFilter innerFilter) { if (innerFilter == null) { throw new ArgumentNullException("innerFilter"); } _innerFilter = innerFilter; } /// public bool AllowMultiple { get { return true; } } /// Gets the authentication type of the OWIN middleware to use. public string AuthenticationType { get { return _authenticationType; } } internal IAuthenticationFilter InnerFilter { get { return _innerFilter; } } /// public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken) { return _innerFilter.AuthenticateAsync(context, cancellationToken); } /// public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken) { return _innerFilter.ChallengeAsync(context, cancellationToken); } } }