Qual è la differenza tra attestazioni, attributi e ruoli?

7

Sono già state poste molte domande sull'autenticazione basata sulle attestazioni e sulle differenze con altri approcci: Basato sui ruoli e basato sui reclami Spiega l'autenticazione basata sulle attestazioni Ora, la mia risposta preferita è una data su stackoverflow: Utilizzo dell'autenticazione basata sulle attestazioni .

Tuttavia, dopo averli letti, la mia domanda non è stata risolta. La domanda che ho è duplice:

  1. Esiste una differenza tra attestazioni e attributi (ABAC)?
  2. Se possiamo considerare un "ruolo" come una rivendicazione, qual è il particolare vantaggio dell'autorizzazione basata sulle attestazioni sull'autorizzazione basata sui ruoli? ( nota: sto utilizzando un'autorizzazione anziché l'autenticazione qui, poiché ritengo che non si tratti veramente dell'autenticazione ).

Per approfondire la mia domanda, fornirò tre esempi di come vedo un'autorizzazione basata sulle attestazioni, basata sui ruoli e basata sugli attributi. Disclaimer: non sono sicuro che questi esempi siano corretti, sono solo parte della mia domanda.

Esempio basato sulle attestazioni

Ho letto un blogpost interessante in cui viene spiegato come utilizzare l'autenticazione basata sulle attestazioni in MVC / Web API. Sembra che (in quel blogpost) un metodo sia protetto (autorizzato) esaminando le attestazioni associate all'utente che sta tentando di accedere al metodo. Se l'utente ha diritto a "vedere" "streetaddress", allora è autorizzato a visualizzare tali dati.

  [ClaimsAuthorize("Read", "SomeData")]
  public string Get()
  { 
      return “somedata”;
  }

Ora, la creazione delle attestazioni è separata da qualche altra parte, che non è realmente specificata in quel blogpost. Suppongo che il metodo nascosto controlli se quell'utente, con quel determinato ruolo, è autorizzato a visualizzare streetaddress. Ora qual è la differenza con l'autorizzazione basata sui ruoli?

Esempio basato sul ruolo

La differenza non mi è chiara, confrontiamola con la vecchia autorizzazione basata sui ruoli. Posso ancora una volta definire un attributo per ciascun metodo, che limita l'esecuzione di tale metodo a determinati ruoli. Il metodo 'view streetaddress' è ad esempio limitato agli utenti con il ruolo 'admin'. Quindi, invece di controllare il ruolo nel metodo separato, lo controlliamo proprio qui. O mi manca qualcosa qui?

  [RoleAuthorize('admin')]
  public string Get()
     { 
         return “somedata”;
     }

Esempio basato su attributi

Vedo il vantaggio di un controllo dell'autorizzazione più granulare. Ma implementerei qualcosa del genere, per definire che solo un utente con il ruolo admin può accedere a "somedata" durante l'orario di lavoro, e solo se quell'utente amministratore ha gli occhi azzurri.:

  [AttributeAuthorize('role=admin;time=09-17;eyecolor=blue')]
  public string Get()
     { 
         return “somedata”;
     }

Questo ultimo esempio mi sembra davvero vantaggioso, ma non sono sicuro se sia o meno lo stesso del mio primo esempio, che è l'autorizzazione basata sulle attestazioni.

Per terminare, è stata visualizzata un'ultima domanda:

  1. Ciò significa che le attestazioni SONO diverse dagli attributi, in quanto gli attributi vengono utilizzati per definire i diritti di un utente, mentre le rivendicazioni sono questi diritti?
posta Michael 04.03.2014 - 11:10
fonte

1 risposta

5

Gli attributi sono rivendicazioni. Un reclamo è semplicemente una dichiarazione di qualcuno / qualcosa che un utente ha un determinato attributo. Quel qualcuno è l'emittente che potrebbe essere un IdP o un bit interno di logica che ottiene i dati dal database.

Questo ti offre modo una maggiore flessibilità nella progettazione dei tuoi sistemi, in quanto puoi specificare che una determinata attività richiederà sempre un utente con un determinato attributo, ad es. un dato diritto, dire "CanTransferMoney". Che ruolo puoi creare per descrivere correttamente chi può farlo? Quante volte potrebbe essere solo quel ruolo che può farlo?

Ad un livello superiore è possibile configurarlo in modo tale che tutti gli utenti nel ruolo "Money Manager" abbiano l'attributo "CanTransferMoney", ma nel fare ciò non richiederebbero di apportare modifiche al codice, mentre la codifica hard un ruolo nel codice potrebbe.

Per quanto riguarda concettualmente la tua ultima domanda, una rivendicazione definisce quali sono i tuoi diritti e un attributo definisce quali sono i tuoi diritti. A mio parere, a un certo punto, in realtà si tratta solo della semantica su quale nome si desidera utilizzare. Se osservi in che modo i token SAML sono stati progettati in origine, vedrai che un reclamo era / è una funzione degli attributi forniti nell'asserzione.

    
risposta data 04.03.2014 - 18:44
fonte

Leggi altre domande sui tag