2010-02-01 12 views
3

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?

+0

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? –

Répondre

1

Je pense qu'il est encourageant que vous ayez hâte de ne pas écrire de code mort MAIS je pense que vous devancez.

Vous devez produire un ou plusieurs picots qui sont traités comme jetables afin de déterminer par vous-même ce qui a du sens pour votre scénario particulier. Cela dit, si toutes vos règles sont dans la base de données, créez une CAM de base sproc qui lit le nom du sproc à partir du fichier de configuration. Les arguments CheckAccess ne vont pas changer de sorte que la signature du sproc peut être immuable, ce qui vous permet de les désactiver au besoin.

+0

J'ai écrit du code. Je peux écrire et analyser une chaîne représentant les critères que les revendications de l'utilisateur doivent satisfaire, mais je n'arrive pas à comprendre comment associer une politique aux ressources et aux actions ... Je pense que dans ma base de données, il faudra plusieurs tables pour indiquer les mappings de "ressources" et "actions" à "politiques" –

+0

J'ai un prototype fonctionnel d'un ClaimsAuthorizationManager qui nécessite que l'utilisateur soit dans un rôle pour accéder pages Web désignées. –