2017-08-18 2 views
0

J'essaye de rediriger une requête non autorisée vers une page interdite mais à la place je reçois une page interdite dans le corps de la réponse, comment puis-je résoudre ce problème?Asp.net web api: rediriger une requete non autorisée vers une page interdite

Voilà ma classe StartUp:

app.CreatePerOwinContext(StoreContext.Create); 
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    ExpireTimeSpan = TimeSpan.FromDays(30), 
}); 

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 

app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 

La méthode qui im ​​essayant d'atteindre est:

[HttpGet] 
    [Authorize(Roles = "Admin")] 
    public string GetCurrentUsername() 
    { 
     return UserManager.FindByEmail(User.Identity.Name).Name; 
    } 

i ont essayé ces choses:

  • supprimer LoginPath de cookieOptions à retourner 401
  • créer un attribut d'autorisation personnalisé

par la voie im en utilisant angulaire, je pense que ce problème est lié à l'appel ajax ...

+0

avez-vous vérifié ma réponse ci-dessous? –

Répondre

0

vous pouvez étendre l'attribut Autoriser pour spécifier la page interdite. Quelque chose comme:

Ajoutez une nouvelle classe nommée AuthorizationAttribute qui hérite de la classe AuthorizeAttribute. puis remplacer les 2 méthodes

public class AuthorizationAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     //check if user in in role admin and if yes then return true, else return false. Once it returns false, then HandleUnauthorizedRequest will be triggered automatically 
     return userManager.IsUserInAdminRole(username); 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     filterContext.Result = new RedirectResult("~/Error/ForbiddenPage"); 
    } 
} 

Et dans votre méthode, utilisez la nouvelle classe AuthorizationAttribute:

[HttpGet] 
    [Authorization] //You can just write Authorization without the word Attribute 
    public string GetCurrentUsername() 
    { 
     return UserManager.FindByEmail(User.Identity.Name).Name; 
    } 

Si elle est liée à votre ajax, vous trouvez ici: github.com/ronnieoverby/mvc-ajax-auth un problème similaire avec une solution

+0

j'ai vérifié cela avant et il n'a pas fonctionné pour moi :( – AhmadShafiei

+0

voir ce lien github.com/ronnieoverby/mvc-ajax-auth –

+0

cela fonctionne sur mvc mais im en utilisant web api et angulaire – AhmadShafiei