Quali sono le migliori pratiche per l'implementazione di ACL

8

Ho un sito Web con determinate voci di menu che devono essere nascoste agli utenti finali.

Il sito Web ha PHP nel front-end e Java e Spring nel back-end, implementato su un sistema operativo Linux in un'infrastruttura VM, sebbene lo stack completo della tecnologia non sia completamente compreso in quanto è un sistema legacy e non completamente documentato.

Ho bisogno di proteggere il sito e le funzioni in base ai controlli di accesso: utenti mappati a gruppi e gruppi che hanno accesso a diverse voci di menu (funzioni). Devo anche fornire un'interfaccia per gli amministratori per modificare la mappatura da funzioni a gruppo. Richiedo anche un controllo accurato sul livello del diverso accesso al metodo di lettura / scrittura.

Capisco che ho bisogno di ACL. Qual è la progettazione delle migliori pratiche per un tale requisito?

Opzioni e domande:

  • DB - i problemi negativi sarebbero: vecchio stile e creazione della mia funzione di gestione delle identità con tutti i suoi inconvenienti e complessità.
  • LDAP - aspetti negativi: ancora il mio sistema di gestione delle identità, ma probabilmente più semplice di DB, ma non sono sicuro di come funzioni il mapping dei livelli di funzione ai gruppi. I provider LDAP forniscono la mappatura dei gruppi a determinate funzioni (ad esempio una voce di menu "account" - Voglio solo che le finanze possano visualizzare il menu degli account)
  • OpenAM e soluzioni simili esternalizzando Identity Management - può funzionare? Ho letto di questo - l'autenticazione lo capisco ma l'autorizzazione a livello di grana fine non lo faccio. Sembra che tu abbia bisogno di un prodotto LDAP configurato come origine dati, quindi cosa offre OpenAM rispetto all'opzione 2 sopra perché sarebbe lo stesso? Con OpenAM sembra che configuri un servizio di identità, ma ottengo la sicurezza a livello di contenitore - quindi server web e app server ma dà la sua pagina di accesso. Presumo che sia possibile configurarlo per accedere ai fogli di stile in modo che si integri con la pagina di accesso corrente - ma qualcuno ha fatto su uno qualsiasi di questi tipi di prodotti per essere sicuro che sia possibile? Inoltre, questo è il mio ACL requisiti? È questo il miglior design e quanto è più complicato da configurare rispetto a LDAP e configurazioni di app?

Ulteriori domande:

  • La soluzione LDAP è meglio consigliata?
  • Hai qualche suggerimento sui prodotti open source per Apache LDAP? Sono buoni / gestiti facilmente? Qualsiasi interfaccia possibile per la manipolazione di funzioni in gruppi? - LDAP consente la mappatura a livello di granulosità di funzioni / metodi per gruppi o è qualcosa che viene fatto nell'applicazione? Questa parte in particolare è confusa. Se qualcuno può offrire una buona risorsa su questo, sarebbe buono.
posta bliss 01.05.2014 - 12:17
fonte

2 risposte

1

Hai bisogno di autorizzazione esterna, ad es. autorizzazione basata sulle attestazioni (specifica di Microsoft) o più ampiamente sul controllo degli accessi basato sugli attributi (ABAC).

ABAC è stato recentemente definito da NIST e puoi scaricare il loro rapporto qui .

Nelle tue domande punti a LDAP e gruppi. Quindi spiega che è necessario associare funzioni a gruppi / ruoli. LDAP, ruoli e gruppi rappresentano i tuoi attributi. Potrebbero anche provenire da altre fonti (ad esempio un database). Quello che ti manca è la logica dell'autorizzazione: la mappatura tra gruppi e funzioni.

In ABAC, quella logica è espressa come politica di autorizzazione. OASIS ha uno standard per quello chiamato XACML, l'eXtensible Access Control Markup Language. In XACML, utilizzerai gli attributi per definire quale accesso deve essere consentito o rifiutato.

Ad esempio:

A user with the role manager and in the group finance can view the finance menu.

Puoi leggere di più su XACML qui e qui .

    
risposta data 13.05.2014 - 15:33
fonte
0

Non lo classificherei sotto Gestione identità; questa è una domanda di gestione degli accessi. È decisamente consigliabile esternalizzare la soluzione di gestione degli accessi e non sono a conoscenza di alcuna soluzione che non utilizzi LDAP come negozio.

Il controllo dell'accesso a grana fine definisce l'accesso agli elementi visualizzati all'interno della stessa pagina o URL per es. un URL con parametri stringa di query può essere 'access-managed' con un prodotto che supporta il controllo dell'accesso a grana fine, diversamente dalle soluzioni di controllo accessi a grana grossa che supportano solo questo a livello di pagina, ad esempio una pagina html, jsp, php, ignorando la stringa di query parametri o altri pulsanti, collegamenti all'interno della pagina.

Una soluzione è (supponendo che la soluzione di gestione degli accessi non fornisca un controllo di accesso a grana fine - molti non lo fanno) è quella di combinare il prodotto di gestione degli accessi e il codice personalizzato per implementare il controllo dell'accesso a grana fine. Definire gruppi / attributi personalizzati nel prodotto di gestione degli accessi. Queste definizioni personalizzate devono avere accessi incrociati, letti, scritti definiti come in TRW per es. Quindi, ad es. alcuni pulsanti / collegamenti vengono visualizzati solo per gli amministratori sullo stesso URL http. Definisci anche gli stessi valori nel tuo database personalizzato (se necessario) per associarli alle autorizzazioni / tipo dell'utente AND ai loro gruppi personalizzati.

Quando gli utenti accedono al tuo sito web, passano i diritti di accesso dell'utente come intestazioni http al sito web. Leggi queste intestazioni, analizza questi valori e, in base al tipo di utente e alle autorizzazioni, visualizza i pulsanti / i collegamenti per un utente. Ad es. se un'intestazione contiene R come attributo e se il tipo di utente non è un amministratore, non visualizzare i pulsanti che soddisfano i criteri R ma non i criteri del gestore - questo può essere cercato nel database.

La soluzione sopra riportata è irrilevante se si riesce a ottenere una soluzione di gestione degli accessi che supporti il controllo dell'accesso a grana fine, ma se i costi sono un problema, la soluzione di cui sopra dovrebbe essere semplice da implementare.

    
risposta data 19.05.2014 - 09:07
fonte