2013-02-25 2 views
0

Я пытаюсь внедрить защиту на основе требований в веб-приложении. У меня есть класс.Зачем получать WindowsPrinciple в AuthorisationManager в asp.net

public class AuthorisationManager : ClaimsAuthorizationManager 
{ 
    public override bool CheckAccess(AuthorizationContext context) 
    { 
     //if (context.Principal.Identity.IsAdmin()) 
     // return true; 
     var resource = context.Resource.First().Value; 
     var action = context.Action.First().Value; 
     return context.Principal.HasClaim(resource, action); 
    } 
    public override void LoadCustomConfiguration(System.Xml.XmlNodeList nodelist) 
    { 
     base.LoadCustomConfiguration(nodelist); 
    } 
} 

и я CustomPrinciple как

public class CustomPrinciple : ClaimsPrincipal 
{ 
    public CustomPrinciple(IIdentity identity) 
     : base(identity) 
    { 
    } 
} 

Его всегда возвращаются ложь, потому что context.Principal является WindowsPrinciple. Я попытался установить его в Globas.asax.cs как

protected void Application_PostAuthenticateRequest(Object sender, EventArgs e) 
    { 
     HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 

     if (authCookie != null) 
     { 
      FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 

      PermissionManager mgr = new PermissionManager(); 
      mgr.CheckUserAccess("", ""); 
      mgr.LoadPermissionModel("XYZ"); 

      HttpContext.Current.User = mgr.LoadPermissionModel("ABC"); 
      Thread.CurrentPrincipal = HttpContext.Current.User; 
      AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal); 
     } 
    } 

Как я могу изменить его так, что я могу получить CustomPrinciple в CheckAccess(AuthorizationContext context)

Благодарности

+1

Возможно, у вас есть «<авторизация mode =« Windows »> в вашем web.config вместо« Forms »или« None »(оба должны работать с auth на основе утверждений). –

+0

вы правы. 'GenericPrinciple' теперь в AuthorizationManager, но все же мне нужно получить' CustomPrinciple'. –

+0

@WiktorZychla Я могу получить его сейчас. Спасибо за это. Вы можете добавить его в качестве ответа, чтобы я мог его принять. снова –

ответ

2

(Предложенный ответ будет принят) :

У вас есть <authorization mode="Windows"> в вашем web.config вместо Forms или None (оба должны работать с auth на основе утверждений).

+0

Я использую службу WCF и установил authorizationMode в «None» и все еще получаю WindowsPrincipal во второй раз, когда вызывается CheckAccess. (Да, он вызывается с ClaimsPrincipal в первый раз, когда главный соответствует my incomingPrincipal из моего ClaimsAuthenticationManager, но с WindowsPrincipal второй раз). – Arnaud

Смежные вопросы