2015-12-23 6 views
9

Ich teste das [Authorize] Attribut, aber ich kann keine Umleitung auf die Anmeldeseite vornehmen, wenn der Benutzer noch nicht angemeldet ist (der Chrome-Inspektor gibt eine 401 zurück).Umleiten zur Anmeldung mit Attribut Autorisieren mit Cookies Authentifizierung in ASP.NET 5

Dies ist mein Code, um die Anmeldung in meinem Controller (sehr einfach) zu machen.

if (model.UserName == "admin" && model.Password == "test") 
{ 
    var claims = new[] { new Claim("name", model.UserName), new Claim(ClaimTypes.Role, "Admin") }; 
    var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); 
    await HttpContext.Authentication.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity)); 
    return RedirectToAction("Index", "Home"); 
} 

Und das ist meine Konfiguration in der Startup.cs für Anmeldungen:

app.UseCookieAuthentication(options => 
    { 
     options.AutomaticAuthenticate = true; 
     options.LoginPath = new PathString("/Account/Login"); 
    }); 

Irgendwelche Ideen?

Danke !!

+0

Können Sie uns Ihre 'Startup.cs' sowie die Controller, den Sie sichern wollen? Es scheint mir, dass es eine Ihrer "app.Use ..()", die möglicherweise in der falschen Reihenfolge sein könnte. –

Antwort

7

Ihre Startup.cs sollte wie folgt aussehen:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    LoginPath = "/account/login", 

    AuthenticationScheme = "Cookies", 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true 
}); 

Einstellung der Auto maticChallenge ist, was das Attribut [Autorisieren] zum Funktionieren bringt. Stellen Sie sicher, dass das [Authorize] -Attribut auf einem der Controller enthalten ist, auf dem die Umleitung (302) stattfinden soll.

Es ist ein sehr einfaches Beispiel in diesem GitHub Repo, die einige Hinweise liefern könnten: https://github.com/leastprivilege/AspNet5TemplateCookieAuthentication

+1

Tatsächlich macht die Schemaeigenschaft "Autorisierung nicht möglich". Hier können Sie die Filterung aktivieren und auch die manuelle Authentifizierung aktivieren. Es ist einfach ein Etikett. AutomaticChallenge sorgt dafür, dass die Redirect Pieces funktionieren. – blowdart

+0

@blowdart Einverstanden, was ich meinte, und es ist möglicherweise nicht erforderlich, weil die Standardwerte das Autorisierungsschema/die Richtlinie, die standardmäßig von [Authorize] erzwungen wird, "Cookies" sind, so dass Redirect für ein benutzerdefiniertes Schema nicht funktioniert mit einem diff-Namen. Ich habe diesen Teil nur entfernt, da dieses Szenario nicht relevant ist. Vielen Dank! –

+1

Autorisieren wird alle registrierten Authentifizierungs-Middleware durchlaufen, deren AutomaticAuthenticate-Eigenschaft true ist/Es gibt keinen Standardwert. Die Cookie-Middleware setzt diese Eigenschaft jedoch standardmäßig auf true. – blowdart

1

Versuchen Sie dies in den Startup.cs:

app.UseCookieAuthentication(options => 
{ 
    options.AuthenticationType = CookieAuthenticationDefaults.AuthenticationScheme; 
    options.AutomaticAuthenticate = true; 
    options.AutomaticChallenge = true; 
    options.LoginPath = new PathString("/Account/Login"); 
}); 

Und diese im -Controller

IAuthenticationManager authManager = Request.GetOwinContext().Authentication; 
authManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
+0

Sie vermissen AutomaticChallenge = true – blowdart

+0

Sie haben Recht! Danke –

Verwandte Themen