2017-06-15 3 views
1

Je vais sécuriser mon application Spring Cloud avec OAuth2 et XACML (en utilisant AuthZForce).Passer du format personnalisé ABAC au format XACML

J'ai implémenté une solution ABAC simple, capable de gérer les cas d'utilisation suivants, mais je souhaite passer à XACML. C'est possible?

ancien domaine

je (dans la base de données):

  • politiques (par exemple subject.id == resource.ownerId), qui sont vérifiés par le enfocement point de prendre une décision
  • autorisations (par exemple delete_user), qui ont des politiques définies
  • rôles (par exemple des employés), qui détiennent des autorisations
  • exploit ures (par ex. PREMIUM), qui détiennent un certain défaut et par la société des rôles utilisables et les autorisations
  • entreprises, qui ont des caractéristiques
  • utilisateurs, qui sont attribués à la société

cas d'utilisation

maintenant une l'utilisateur d'une entreprise peut créer un nouveau rôle ROLE_X. Il peut attribuer des autorisations à ce rôle.

MISE À JOUR

Parce que cette question contient à l'origine de deux questions différentes, j'ai décidé d'externaliser la deuxième question (AuthZForce for Spring Cloud)

Répondre

1

Où est en grande partie des politiques stocker hors de propos. Cela dépend du moteur que vous utilisez, par ex. AuthZForce (j'ai envoyé un ping à l'auteur pour pouvoir l'utiliser), SunXACML, WSO2 ou Axiomatics. Clause de non-responsabilité: Je travaille pour Axiomatics. Nous utilisons une base de données pour stocker les stratégies XACML mais cela ne modifie pas les exigences d'autorisation ni la modélisation.

J'ai quelques commentaires sur votre message original.

  • subject.id==resource.ownerId est ce que nous appelons généralement une condition dans XACML. Vous comparez deux attributs pour mettre en œuvre une relation.
  • Vous mentionnez des autorisations, par ex. DELETE_USER. Dans XACML, vous les divisez généralement en attributs atomiques, par exemple. une action d'une part et un objet ou une ressource d'autre part (USER). Alors que RBAC est basé sur les rôles et les permissions, ABAC est basé sur les attributs. Idéalement ces attributs représentent un aspect unique (étant un utilisateur , en essayant de supprimer ...)
  • ROLE existe encore dans ABAC. Ce sera la base de vos politiques.
  • Les caractéristiques et les entreprises sont des attributs que vous utiliseriez.

Avec cela à l'esprit, vous pouvez écrire des politiques telles que les suivantes (en utilisant la notation ALFA):

namespace axiomatics{ 

    namespace user{ 
     attribute role{ 
      category = subjectCat 
      id = "axiomatics.user.role" 
      type = string 
     } 
     attribute company{ 
      category = subjectCat 
      id = "axiomatics.user.company" 
      type = string 
     } 
     attribute userId{ 
      category = subjectCat 
      id = "axiomatics.user.userId" 
      type = string 
     } 
    } 

    namespace action{ 
     attribute actionId{ 
      category = actionCat 
      id = "axiomatics.action.actionId" 
      type = string 
     }   
    } 

    namespace resource{ 
     attribute company{ 
      category = resourceCat 
      id = "axiomatics.resource.company" 
      type = string 
     } 
     attribute owner{ 
      category = resourceCat 
      id = "axiomatics.resource.owner" 
      type = string 
     } 
    } 

    policyset springapp{ 
     apply firstApplicable 
     policy employees{ 
      target clause user.role == "employee" 
      apply firstApplicable 
      /** 
      * Employees can create roles in their own company 
      */ 
      rule createRole{ 
       target clause action.actionId=="create" 
       condition user.company==resource.company 
       permit 
      } 
      /** 
       * Employees can delete roles they own 
       */ 
      rule allowDelete{ 
       target clause action.actionId == "delete" 
       condition user.userId == resource.owner 
       permit 
      } 
     } 
    } 
} 
+0

merci pour la réponse détaillée. Je vois que ma propre solution est similaire à XACML et c'est parfait, car la migration ne serait pas si difficile. Mais il est important pour moi de stocker les politiques dans la base de données (pour les changer à l'exécution). Savez-vous quelles solutions libres ou open source supportent cela? – benkuly

+0

Je suppose que tous les moteurs open source peuvent lire les politiques XACML à partir d'une base de données. Essayez AT & T XACML, WSO2 ou AuthZForce, celui que vous avez mentionné. C'est l'un des plus récents et des plus complets de la communauté OSS. –

+0

Savez-vous comment ou devrais-je commencer une nouvelle question? Le problème est qu'ils n'ont pas ou peu documentations, donc je ne sais pas lequel est le plus approprié pour les politiques de base de données. – benkuly