2012-10-25 34 views
5

çağrılan değil, tek yöntem OnAuthorization çağrılan, ancak AuthorizeCore değil ediliyor.
bu onu diyoruz nasıl:geçersiz kılma AuthorizeCore Nedense

[AuthorizeWithRoles(Roles = "Affiliate")] 
public string TestOnlyAffiliate() 
{ 
    return "ok"; 
} 

bu fiili niteliktir.

public class AuthorizeWithRolesAttribute : AuthorizeAttribute 
{ 

    public string Roles { get; set; } 

    // 
    //AuthorizeCore - NOT INVOKING! 
    // 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return true; 
    } 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 

    } 
} 

cevap

-1

bu hiç yardımcı olur, ama bu aynı şey koştu ve en azından benim amaçlar için, ben hiç AuthorizeCore geçersiz kılmak gerek yoktu, belirledi emin değilim. Dürüst olmak gerekirse neden orada olduğundan emin değilim. MSDN'in dediği gibi OnAuthorization "bir süreç yetkilendirme istediğinde" çağrılır. Bu, AuthorizeWithRoles özniteliğinize sahip herhangi bir yöntem için çağrılacağı anlamına gelir. Kullanıcı iznine sahip olup olmadığını kontrol etmek için OnAuthorization içinde özel kodunuzu koyabilirsiniz ve filterContext gelen HttpContext alabilirsiniz beri AuthorizeCore gerek orada gerçekten. İşte benim için çalışan basit bir örnek:

public class LoginRequired : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (Common.ValidateCurrentSession(filterContext.HttpContext)) 
     { 
      //this is valid; keep going 
      return; 
     } 
     else 
     { 
      //this is not valid; redirect 
      filterContext.Result = new RedirectResult("/login"); 
     } 
    } 
} 

Umarım yardımcı olur. Bunun yanı sıra, belli ki OnAuthorization geçersiz kılma olduğunu beyan gerekir.

DÜZENLEME: Baz OnAuthorization yöntemi AuthorizeCore içine dediği olduğuna inanıyoruz. Yetkilendirmeyi geçersiz kıldığınızdan, açık ki bu çağrı kaybolur. Ben yalnız OnAuthorization bırakılırsa AuthorizeCore sadece ilgili olacağını geçersiz kılma veya inanmak geçersiz kılınmış yöntemi içinde base.OnAuthorization (filterContext) denilen eğer.

+0

-1 Sen OnAuthorization', bir güvenlik sorunu sunuyoruz 'geçersiz kılmak gerekiyor. Cevabımı gör. – Stijn

9

Sen OnAuthorization geçersiz kılmak gerekiyor. Potansiyel önbelleğe alma sorunları ile ilgilenen ve AuthorizeCore çağırır.

// In the worst case this could allow an authorized user 
// to cause the page to be cached, then an unauthorized user would later be served the 
// cached page. 

http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/1acb241299a8#src/System.Web.Mvc/AuthorizeAttribute.cs

AuthorizationCore da özel mantık koyun.

+1

sadece 'base.OnAuthorization (filterContext) arayamadım,' AuthorizeCore' sen 'filterContext' kaybetmek üzere olduğunu gidiyor sorun; bu önbellek şey olduğundan emin olmak için geçersiz kılınmış' OnAuthrization' başında ' sorun değil? –