Architettura di sicurezza: impostazioni per guidare interfaccia utente e privilegi (diritti) - Basato sui ruoli, per account utente

5

In che modo le grandi aziende implementano i loro requisiti di sicurezza centralizzati e utilizzati per guidare cose che le persone possono fare (autorizzate a chiamare un determinato servizio web, inviare un ordine, ecc.) e per guidare l'interfaccia utente (disabilitare pulsanti, menu opzioni, singoli campi modulo)?

Sto prendendo in considerazione l'architettura RBAC: Utenti - > Ruoli, ruoli - > Privilegi.

Applicazioni complesse con autorizzazioni basate su molti singoli account-account-user-role-amountThreshhold avrebbe molti, molti "ruoli" e la gestione di questa operazione si complica con il crescere del numero di ruoli.

La gestione di tutte queste opzioni possibili sembra scoraggiante e la mia esperienza precedente è quella di codificare in modo rigido tale logica nell'applicazione.

Es: If (User.Roles("IsAccounting")) { btnEditOrder.enabled = false; }

Ho il compito di progettare / implementare un'architettura / servizio di sicurezza che verrà utilizzato come punto di autenticazione / autorizzazione comune per qualsiasi / tutte le applicazioni (tutte .NET, ma alcune GUI e alcune orientate ai processi).

Questo non è possibile immediatamente a causa dell'organizzazione aziendale in merito agli account dei clienti e ai livelli di autorizzazione in base agli importi finanziari.

Ex: John è un utente e può visualizzare e inviare richieste per account "Microsoft" e "Google". Mike può visualizzare le richieste "Microsoft" e "Google" ma può solo inviare richieste "Google".

Il numero di account / utenti è ampio e variabile.

Se seguo RBAC, ci saranno centinaia di "ruoli" per soddisfare tutti i diritti richiesti (privilegi). Questo non aiuta perché l'obiettivo finale è quello di fornire uno strumento GUI facile da gestire in modo che i manager possano assegnare i loro report diretti ai ruoli appropriati.

Stavo pensando di implementare questo pezzo di sicurezza con la seguente API (bozza di massima nello pseudo-codice):

UserContext securityContext = Security.GetContext(userID, userPwd);

E l'utilizzo in un'applicazione sarebbe come questo: if (securityContext.RequestManager.CanSubmitRequest("Google")) {...}

In questo modo ci sarebbero migliaia di questi metodi 'Can (params)' per controllare le autorizzazioni che non rendono facile gestire o utilizzare questo modello.

Qualsiasi link / idea / puntatore è apprezzato.

È un negozio .NET, ma nulla di quello che ho visto da .NET (Membership / AzMan) ci darà i requisiti di granularità e di delega richiesti. ActiveDirectory / integrazione Oracle LDAP sarebbe bello, ma non necessario.

Il vecchio sistema (corrente) utilizza LDAP per autenticare gli utenti, ma tutte le autorizzazioni vengono eseguite internamente e archiviate nelle classiche tabelle "Utenti, ruoli, diritti".

    
posta Leon 07.03.2011 - 15:41
fonte

3 risposte

5

Hai esaminato l'Autenticazione basata sui crediti? L'idea è quella allegata a ciascun utente autenticato è una raccolta di attestazioni e ogni rivendicazione rappresenta qualcosa sull'utente. Quando l'utente viene autenticato, viene raccolta una raccolta di attestazioni per la particolare applicazione in questione e può contenere un set arbitrario come "CanSubmitGoogleOrders" o "PurchaseLimit = $ 4000".

L'applicazione stessa deve solo sapere quali potenziali rivendicazioni possono ricevere e agire di conseguenza se vede (o non vede) alcuna rivendicazione particolare.

    
risposta data 07.03.2011 - 17:59
fonte
5

Penso che dipenda molto dall'uso finale. Appena fuori di testa e senza sapere una tonnellata sull'utente finale dell'app, hai pensato all'autenticazione basata su sessioni? Fondamentalmente fai un controllo sulle loro autorizzazioni e applica qualche tipo di identificatore alla loro sessione. In questo modo è possibile concedere le autorizzazioni permesse delle richieste, che dovrebbero essere più veloci del controllo di tutte le autorizzazioni utente su ogni richiesta. Basta disporre di una tabella di ricerca per un'azione e di quali sessioni è possibile utilizzarla, in modo da poter archiviare tutto centralmente, che è molto più facile da gestire. Solo una nota a margine, questa è puramente una risposta alla facilità di implementazione / gestibilità / velocità, più sicuro vuoi che la tua app sia evidente e più sacrifichi la velocità. Ciò che realmente guiderà la tua implementazione è capire il ragionevole punto di equilibrio tra velocità accettabile e sicurezza.

Pubblicherò una risposta più lunga quando ne avrò un po 'più tardi oggi.

    
risposta data 07.03.2011 - 17:51
fonte
4

Questo è in realtà un problema ben noto, e sfortunatamente non esistono ancora molte soluzioni pacchettizzate, almeno non molto buone.

Il controllo degli accessi basato sui ruoli è solo un compromesso tra amministrazione e sicurezza scalabili. Spesso, questa era una buona scelta, semplicemente perché l'alternativa era - beh, non ci sono state davvero molte alternative fino ad ora ... Coinvolse sempre enormi quantità di codice personalizzato complesso. Tranne che nel caso di requisiti di sicurezza bancari o militari, quella era la strada da percorrere ... ma, era sempre un compromesso nell'interesse di rendere la sicurezza gestibile.

Mentre il suggerimento di @SteveS di un'autenticazione basata sulle attestazioni è buono (per .NET è possibile controllare ciò che era noto come Geneva Framework, o Windows Identity Foundation (WIF) ), ed è decisamente un miglioramento nella direzione di una sicurezza più granulare, non aiuta davvero a risolvere il problema della" scalabilità amministrativa ".

Puoi anche guardare nella direzione di ciò che è (sfortunatamente) noto come "gestione dei diritti", controllo dell'accesso basato su criteri / attributi (ABAC / PBAC), controllo dell'accesso sensibile al contesto, ecc.

A tal fine, puoi consultare XACML - mentre ha sicuramente delle imperfezioni non banali (anche la prossima v3 manca il segno ...), è sicuramente un passo importante nella giusta direzione concettuale. (È solo un formato / protocollo, non familiare con gli strumenti standard per far rispettare questo ...)

In conclusione, sfortunatamente, non ci sono ancora soluzioni valide per la granularità scalabile della gestione del controllo degli accessi. Al giorno d'oggi non richiede ancora una piccola quantità di personalizzazione, né la codifica personalizzata nella tua app, né ampie modifiche ad alcuni prodotti amministrativi passivamente correlati. Forse qualche piccola startup troverà presto la soluzione ...
Divulgazione: sto lavorando con uno di questi startup, per rendere la granularità di accesso scalabile qualcosa che puoi usare ...

    
risposta data 16.03.2011 - 16:15
fonte

Leggi altre domande sui tag