Я пытаюсь внедрить защиту на основе требований в веб-приложении. У меня есть класс.Зачем получать 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)
Благодарности
Возможно, у вас есть «<авторизация mode =« Windows »> в вашем web.config вместо« Forms »или« None »(оба должны работать с auth на основе утверждений). –
вы правы. 'GenericPrinciple' теперь в AuthorizationManager, но все же мне нужно получить' CustomPrinciple'. –
@WiktorZychla Я могу получить его сейчас. Спасибо за это. Вы можете добавить его в качестве ответа, чтобы я мог его принять. снова –