Dato un set specifico di autorizzazioni, ad es. EditPage, CreateProject, ModifyUser, attualmente sto esaminando due diversi modi di creare alcuni tipi di attestazioni personalizzate per modellare questo comportamento. Posso trovare poche informazioni online sul modo migliore per farlo e sperare in qualche feedback su come l'hai fatto nei tuoi sistemi.Best practice per la creazione di tipi di attestazione personalizzati
Il primo approccio che ho considerato è quello di utilizzare un "azione" tipo di attestazione, con l'azione specifica specificata dal valore del credito:
var claims = new []
{
new Claim("http://schemas.company.com/claims/project/action", "EditPage"),
new Claim("http://schemas.company.com/claims/project/action", "CreateProject"),
new Claim("http://schemas.company.com/claims/project/action", "ModifyUser")
}
Il secondo approccio è quello di utilizzare il tipo rivendicazione stessa per definire l'azione eseguita, il valore non viene utilizzato. Questo è come uno stile di sicurezza "PossessProperty" in cui, finché l'utente ha il claimtype, possono eseguire l'azione.
var claims = new []
{
new Claim("http://schemas.company.com/claims/project/editpage", ""),
new Claim("http://schemas.company.com/claims/project/createproject", ""),
new Claim("http://schemas.company.com/claims/project/modifyuser", "")
}
Da notare anche, nei tipi di attestazioni di cui sopra ho incluso un discriminatore "progetto" in modo che possa distinguere tra un utente che può modificare una pagina in Project A ma non Progetto B.
Noi stiamo anche pianificando di archiviare tutte queste rivendicazioni personalizzate in un database centrale di "Autorizzazione", quindi è richiesta l'unicità.
Qualsiasi pensiero o feedback sarebbe molto apprezzato.
Grazie, speravo che avresti risposto a questo. Mi sono piaciuti molto i tuoi video di Pluralsight. In effetti sto utilizzando ClaimsAuthorizationManager, ma devo ancora iniziare a implementare le politiche. Il requisito è quello di avere una sicurezza granulare molto fine, in modo che agli utenti vengano concessi diritti specifici per eseguire azioni specifiche, ad es. caricare immagini, modificare pagine, ecc. Stavo pensando che i diritti/azioni/permessi specifici sarebbero stati modellati ciascuno come una richiesta individuale. Ma stai dicendo che è un anti-modello. Quindi questa intera sicurezza a grana fine è un anti-modello? Sono ancora più confuso ora. – mikesigs
No per niente;) Semplicemente non rendere tutte queste affermazioni parte del ClaimsPrincipal. – leastprivilege
Quindi le affermazioni "azione" non sono più richieste allora. Non vengono memorizzati con ClaimsPrincipal durante la trasformazione delle attestazioni. Piuttosto, il gestore autorizzazioni dovrebbe controllare le autorizzazioni specifiche tramite qualche chiamata di servizio/ricerca db? Speravo di avere un set statico di criteri, ma non funzionerebbe con questo modello. – mikesigs