ho sempre raccomandano che le persone date un'occhiata @ il least privilege repo in quanto ha alcuni ottimi esempi di tutti i vari approcci si può prendere con il nuovo ASP.NET core Autenticazione e autorizzazione paradigmi .
Può questo nuovo meccanismo di base delle politiche essere più dinamico?
Sì, in effetti è più dinamico rispetto ai precedenti concetti basati sui ruoli. Ti consente di definire criteri che possono essere guidati dai dati. Here è un'altra grande risorsa per i dettagli relativi a questo. È possibile specificare che un punto di ingresso dell'API, ad esempio, sia protetto da un criterio (ad esempio) e che il criterio possa avere un gestore e che il gestore possa fare tutto ciò di cui ha bisogno, vale a dire; esaminare l'attuale User
nel contesto, confrontare le rivendicazioni con i valori nel database, confrontare i ruoli, qualsiasi cosa veramente. Si consideri il following:
definire un punto di voce con il Policy
[Authorize(Policy = "DataDrivenExample")]
public IActionResult GetFooBar()
{
// Omitted for brevity...
}
Aggiungere l'autorizzazione con le opzioni che aggiungono la politica.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthorization(options =>
{
options.AddPolicy("DataDrivenExample",
policy =>
policy.Requirements.Add(new DataDrivenRequirement()));
});
services.AddSingleton<IAuthorizationHandler, DataDrivenHandler>();
}
Quindi definire il gestore.
public class MinimumAgeHandler : AuthorizationHandler<DataDrivenRequirement>
{
protected override void Handle(AuthorizationContext context,
DataDrivenRequirement requirement)
{
// Do anything here, interact with DB, User, claims, Roles, etc.
// As long as you set either:
// context.Succeed(requirement);
// context.Fail();
}
}
è l'idea di completamente diverso?
Si deve sentire molto simile ai concetti precedenti che siete abituati a con auth8 e AuthZ.
Prima di rispondere alla domanda, stavo pensando come te. (Http://stackoverflow.com/questions/36445780/how-to-implement-permission-based-access-control-with-asp-net-core). Ma la risposta di @ Tseng mi ha fatto cambiare idea. La risposta mostra che 'autorizzazione politica' può essere utilizzata dinamicamente. Dai un'occhiata alla risposta, potrebbe essere utile per il tuo caso. –
Non dovresti usare più "ruoli" (come usato in ASP.NET 4.5/MVC 5 prima), usa invece le rivendicazioni. I ruoli non sono molto flessibili e richiedono la modifica del codice ogni volta che si aggiunge un nuovo ruolo.Un reclamo è un permesso specifico basato su una funzionalità della tua applicazione, ad esempio "ReadArticle" o "WriteArticle", "DeleteArticle", "CreateUser" ecc. In questo modo è necessario aggiungere una politica solo quando si aggiunge una nuova funzionalità (come capacità di gestire gli utenti o pubblicare articoli). Un "ruolo sarebbe semplicemente una raccolta di rivendicazioni che un utente ha quando accede. Quindi controlla nella politica – Tseng
Tieni presente che non puoi creare una politica dinamica quando non ce n'era una prima. non posso permettere all'utente di specificare un criterio "over age of 18", se non c'è codice nel backend che lo gestisce (cioè il criterio e il gestore di AgeOver18' che controlla l'età dell'utente). essere creato da un non sviluppatore o da qualcuno che non ha accesso al codice sorgente (poiché è necessario aggiungere controlli a questo criterio specifico nel codice). Invece di creare una nuova politica, si crea un ruolo una raccolta di politiche/permessi esistenti – Tseng