2014-12-17 7 views
6

AllowAnonymous ve özel bir AuthenticationFilter'dan yararlanmak istiyorum. Birisi bana AllowAnonymous veya başka bir alternatif kullanmak için doğru yönde işaret edebilir mi? TeşekkürÖzel IAuthenticationFilter ve Web API'sında Allowonymous

Ben System.Attribute devralır ve başarıyla

public async Task AuthenticateAsync(
    HttpAuthenticationContext context, 
    CancellationToken cancellationToken) {} 

Benim sorundur AuthenticateAsync yöntemi için mantığı eklemek mümkün olmuştur System.Web.Http.Filters.IAuthenticationFilter

public class MyCustomAuthenticationAttribute : Attribute, IAuthenticationFilter 

uygulayan Kendi özel filtre oluşturduktan

Web API denetleyicimin bazı eylemlerini veya denetleyicilerini yok saymam gerekiyor. Bunu yapmak için System.Web.Http.AllowAnonymousAttribute kullanabileceğimi düşündüm. Örneğin burada niyet gösteren gerçekten basit bir örnek.

[MyCustomAuthentication] 
public class HomeController : ApiController 
{ 
    // no authentication needed allow anonymous 
    [HttpGet] 
    [Route("hianonymous")] 
    [AllowAnonymous] 
    public IHttpActionResult Hello(string name) { 
     return Ok(new { message = "hello " + name }); 
    } 

    // needs to be authenticated 
    [HttpGet] 
    [Route("hiauthenticated")] 
    public IHttpActionResult Hello() { 
     var name = User.Identity.Name; 
     return Ok(new { message = "hello authenticated user " + name }); 
    } 
} 

sorun Authenticate() hala MyCustomAuthenticationAttribute çağrıda olmasıdır. Bunu gerçekleştirmek için AllowAnonymous veya başka bir yöntem kullanmak istiyorum. Herhangi bir girdi için teşekkürler.

Özel kimlik doğrulama özniteliğimi eylem düzeyinde ve denetleyici düzeyinde kullanamayacağımı biliyorum, ancak tüm denetleyiciyi veya genel bir filtre olarak görmek istediğim durumlar var, bu yüzden tek bir eylemde hariç tutulmam gerekiyor. veya kontrolör bazında.

+0

Referans için, asp.net sitesinde [ASP.NET Web API 2'de Kimlik Doğrulama Filtreleri] (http://www.asp.net/web-api/overview/security/authentication-filters) örneğini kullandım Bu başladı. – Scott

cevap

8

o tanımadığı bir Yetkilendirme düzeni bulamazsa HİÇBİRŞEY yapmalıyım IAuthenticationFilter Sizin uygulanması.

http://www.asp.net/web-api/overview/security/authentication-filters

// 2. If there are no credentials, do nothing. 
if (authorization == null) 
{ 
    return; 
} 

// 3. If there are credentials but the filter does not recognize the 
// authentication scheme, do nothing. 
if (authorization.Scheme != "Basic") 
{ 
    return; 
} 

fikir filtre basitçe bilinen bir şemasını kullanarak _DOĞRULA için bir yol olmasıdır.

Hala BİR YETKİ kontrol etmek AuthorizeAttribute ve AllowAnonymousAttribute inşa kullanmanız gerekecektir.