Ich probiere einige der neuen Dinge in VS2013 RC mit MVC5 und der neuen OWIN-Authentifizierungs-Middleware aus.
Ich bin es also gewohnt, das [Authorize]
Attribut zu verwenden, um Aktionen nach Rollen einzuschränken, aber ich versuche, eine auf Ansprüchen / Aktivitäten basierende Berechtigung zu verwenden, und ich kann kein gleichwertiges Attribut dafür finden.
Gibt es eine offensichtliche, die ich vermisse, oder muss ich meine eigene rollen? Ich habe irgendwie erwartet, dass es einen Out of the Box gibt.
Was ich speziell suche, ist etwas in der Art, wie [Authorize("ClaimType","ClaimValue")]
ich es nehme.
Danke im Voraus.
asp.net-mvc
asp.net-mvc-5
claims
EightyOne Unite
quelle
quelle
Antworten:
Am Ende habe ich nur ein einfaches Attribut geschrieben, um damit umzugehen. Ich konnte nichts im Framework sofort finden, ohne ein paar zusätzliche Konfigurationen. Nachfolgend aufgeführten.
public class ClaimsAuthorizeAttribute : AuthorizeAttribute { private string claimType; private string claimValue; public ClaimsAuthorizeAttribute(string type, string value) { this.claimType = type; this.claimValue = value; } public override void OnAuthorization(AuthorizationContext filterContext) { var user = filterContext.HttpContext.User as ClaimsPrincipal; if (user != null && user.HasClaim(claimType, claimValue)) { base.OnAuthorization(filterContext); } else { base.HandleUnauthorizedRequest(filterContext); } } }
Natürlich könnten Sie die Parameter type und value entfernen, wenn Sie das Controller-Action-Verb-Triplett gerne für Ansprüche verwenden würden.
quelle
filterContext.HttpContext.user
.Meine Version ist hier: http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/
quelle
Ich habe festgestellt, dass Sie das Berechtigungsattribut weiterhin mit Rollen und Benutzern mit Ansprüchen verwenden können.
Damit dies funktioniert, muss Ihre ClaimsIdentity zwei bestimmte Anspruchstypen enthalten:
ClaimTypes.Name
und
ClaimTypes.Role
Fügen Sie dann in Ihrer von OAuthAuthorizationServerProvider abgeleiteten Klasse in den von Ihnen verwendeten GrantXX-Methoden beim Erstellen Ihrer ClaimsIdentity diese beiden Ansprüche hinzu.
Beispiel:
var oAuthIdentity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, context.ClientId), new Claim(ClaimTypes.Role, "Admin"), }, OAuthDefaults.AuthenticationType);
Dann können Sie bei jeder Aktion
[Authorize(Roles ="Admin")]
den Zugriff einschränken.quelle
In ASP.NET Core 3 können Sie Sicherheitsrichtlinien wie folgt konfigurieren:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddAuthorization(options => { options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber")); }); }
Verwenden Sie dann AuthorizeAttribute, um vom Benutzer zu verlangen, dass er die Anforderungen einer bestimmten Richtlinie erfüllt (mit anderen Worten, erfüllen Sie den Anspruch, der diese Richtlinie unterstützt).
[Authorize(Policy = "EmployeeOnly")] public IActionResult VacationBalance() { return View(); }
Quelle .
quelle
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Delete", Resource="Customer")] public ActionResult Delete(int id) { _customer.Delete(id); return RedirectToAction("CustomerList"); }
ClaimsPrincipalPermissionAttribute-Klasse
quelle