2017-08-18 26 views
0

Ich versuche, nicht autorisierte Anfrage auf eine verbotene Seite umleiten, aber stattdessen bekomme ich verboten Seite in Antwort Körper, wie kann ich das beheben?Asp.net Web API: umleiten nicht autorisierte Anfrage auf verbotene Seite

Hier ist meine StartUp Klasse:

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); 

Das Verfahren, das zu erreichen, im Versuch ist:

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

ich versucht habe diese Dinge:

  • entfernen LoginPath von cookieOptions zurückzukehren 401
  • erstellen benutzerdefinierte Autorisierung Attribut

durch die Art und Weise im mit Angular, ich glaube, dieses Problem zu Ajax-Aufruf verwendet ist ...

+0

Haben Sie meine Antwort unten überprüft? –

Antwort

0

Sie das Autorisieren Attribut erweitern können die verbotene Seite angeben. etwas wie dieses:

Fügen Sie eine neue Klasse mit dem Namen AuthorizationAttribute hinzu, die von der AuthorizeAttribute-Klasse erbt. und dann überschreiben die 2 Methoden

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"); 
    } 
} 

Und in Ihrer Methode, verwenden Sie die neue AuthorizationAttribute Klasse:

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

Wenn es um Ihre Ajax verwandt ist, finden Sie hier: github.com/ronnieoverby/mvc-ajax-auth ein ähnliches Problem mit Lösung

+0

ich habe das vorher überprüft und es hat nicht funktioniert für mich :( – AhmadShafiei

+0

siehe diesen link github.com/ronnieoverby/mvc-ajax-auth –

+0

es funktioniert auf mvc aber ich benutze web api und eckig – AhmadShafiei

Verwandte Themen