Je travaille sur le tout premier projet à mon bureau où nous utiliserons "Windows Identity Foundation" avec l'autorisation basée sur les revendications. À cette fin, Microsoft .net fournit la classe abstraite ClaimsAuthorizationManager. Pour utiliser cette classe, vous devez remplacer deux méthodes: le constructeur et CheckAccess(context as ClaimsAuthorizationContext)
.Quels sont les bons moyens d'architecturer une classe personnalisée "ClaimsAuthorizationManager" de Windows Identity Foundation?
Le constructeur met tout en place; puis, lorsque l'utilisateur accède à quelque chose, comme une page Web, CheckAccess
est appelé avec un paramètre qui indique l'utilisateur, la ressource à accéder et l'action à entreprendre sur la ressource. Par exemple, CheckAccess
peut être appelée pour voir si l'utilisateur Bob
doit avoir accès à la ressource http://www.mysite.com/SecretPage.aspx
pour effectuer l'action GET
. CheckAccess
renvoie simplement true
ou false
. Windows Identity Foundation nous donne la flexibilité de mettre en œuvre CheckAccess
presque de toute façon imaginable!
Dans les exemples de code fournis par Microsoft, CheckAccess
est configuré pour autoriser l'accès à un utilisateur uniquement s'il a une demande d'anniversaire indiquant l'âge de 21 ans ou plus. Cette stratégie est donnée en texte brut dans le fichier web.config et lue dans le constructeur ClaimsAuthorizationManager
.
Dans mon bureau, nous utilisons SQL pour garder une trace de presque toutes nos données, donc dans mon cas. Je crois qu'il est logique de programmer le ClaimsAuthorizationManager
pour lire les données de SQL afin de déterminer si un utilisateur peut ou non accéder à une ressource. Cependant, il existe une myriade de différentes politiques possibles. Je veux créer un ClaimsAuthorizationManager
qui sera utile dans le projet actuel et que je peux construire et améliorer à l'avenir sans avoir à déchirer et remplacer le projet que je crée aujourd'hui.
Quelles sont les choses les plus importantes à garder à l'esprit alors que je poursuis ce projet? MISE À JOUR: J'ai travaillé sur un système de représentation des politiques de réclamations requises en tant que chaînes de caractères. J'utilise la logique binaire-arbre pour regrouper les politiques. Je maintiens une base de données de réclamations associées aux «ressources» et aux «actions».
Est-ce que quelqu'un d'autre ici a construit une classe ClaimsAuthorizationManager?
Je vois que j'ai finalement reçu une suggestion. Pour ma part, j'ai imaginé une façon de représenter les stratégies d'accès à une page ou à une ressource sous forme de chaînes, telles que minAge (30) + roleRequired ("Supervisor"), ce qui signifie que l'utilisateur doit avoir au moins 30 ans ou être dans le rôle de «superviseur». J'ai écrit une logique d'arbre binaire pour regrouper les politiques. Ce que je trouve plus difficile est de trouver une façon de dire, si l'utilisateur veut effectuer l'action A ou la ressource R, alors comment déterminer la politique pour laquelle l'utilisateur doit avoir les revendications? –