Authentification et autorisation

De RAD Studio
Aller à : navigation, rechercher

Remonter à Développement d'applications DataSnap


Dès que vous avez créé un serveur avec des méthodes serveur, vous pouvez ajouter une logique pour contrôler qui peut invoquer ces méthodes. Pour ce faire, vous pouvez utiliser les fonctionnalités nouvelles et améliorées du composant TDSAuthenticationManager.

Pour démarrer, déposez simplement ce composant sur votre fiche et définissez-le comme le gestionnaire d'authentification à utiliser dans le composant TDSHTTPWebDispatcher, TDHTTPService ou TDSTCPServerTransport, selon la configuration de votre serveur.

Le gestionnaire d'authentification a deux événements : OnUserAuthenticate et OnUserAuthorize. Il a aussi une collection Roles.

OnUserAuthenticate

Cet événement est appelé quand un utilisateur essaie de se connecter (invoquer une méthode) pour la première fois, et prend en paramètres d'entrée des informations de connexion telles que le nom d'utilisateur et le mot de passe, et vous permet de définir une valeur pour le paramètre in/out valid. Par défaut, ce paramètre est défini sur True, mais vous pouvez décider, selon les informations utilisateur ou d'autres informations, si vous voulez définir valid sur True ou False. Le définir sur False refuse la connexion utilisateur, et par conséquent toute invocation tentée.

Si vous décidez de définir valid sur True, vous pouvez aussi choisir de remplir la collection 'UserRoles' qui est passée. Vous pouvez, par exemple, faire quelque chose comme ceci :

 if (User = 'tom') and (Password = 'tom') then
   UserRoles.Add('admin');

Cela signifie que si un utilisateur se connecte sous 'tom' avec le mot de passe correct, un rôle appelé 'admin' est alors défini sur cet utilisateur. Ces rôles utilisateur peuvent être utilisés par la suite dans Autorisation pour éliminer le besoin d'implémenter l'événement OnUserAuthorize.

Roles

Vous pouvez définir Roles de plusieurs manières. Vous pouvez accéder à votre classe de méthodes serveur et ajouter un attribut TRoleAuth au code (nécessite l'unité Datasnap.DSAuth). Cet attribut peut être ajouté au niveau classe ou au niveau méthode, comme ceci :

 [TRoleAuth('admin')]
 TServerMethods1 = class(TComponent)
 public
   function EchoString(Value: string): string;
   function ReverseString(Value: string): string;
 end;

ou ceci :

 TServerMethods1 = class(TComponent)
 public
   [TRoleAuth('admin')]
   function EchoString(Value: string): string;
   function ReverseString(Value: string): string;
 end;

Dans le premier exemple, 'EchoString' et 'ReverseString' requièrent que l'utilisateur dispose du rôle 'admin' pour invoquer la méthode. Dans le deuxième exemple, le rôle 'admin' est associé à la seule méthode 'EchoString'. Notez que l'attribut TRoleAuth a un deuxième paramètre facultatif, la liste 'denied roles', qui se comporte comme prévu. Ces deux paramètres peuvent être une liste de rôles séparés par des virgules.

Vous pouvez aussi définir des rôles en utilisant la collection 'Roles' sur le composant AuthenticationManager. Cette propriété Roles est une collection d'éléments de rôle, où chaque élément de rôle a une classe ou une méthode sur laquelle il s'applique, et une liste de rôles autorisés et / ou refusés. Dans AppliesTo, vous pouvez spécifier un nom de classe, tel que TServerMethods1, qui s'appliquera à toutes les méthodes de cette classe. Vous pouvez aussi spécifier un nom de méthode générique, tel que 'EchoString', qui s'appliquerait alors à la méthode 'EchoString' de toute classe serveur. Autrement, vous pouvez spécifier les deux ; 'TServerMethods1.EchoString' à appliquer à une méthode spécifique d'une classe spécifique.

Si vous le choisissez, ces rôles peuvent être remplis à l'exécution. Notez que si vous voulez modifier la collection à l'exécution, pour obtenir l'instance du AuthenticationManager, vous aurez probablement besoin de déplacer le composant qui l'utilise sur un module de données, si vous utilisez le composant configuré par l'expert Application DataSnap REST.

OnUserAuthorize

L'événement OnUserAuthorize est appelé à chaque fois qu'un utilisateur déjà authentifié avec succès essaie d'invoquer une méthode serveur. Vous n'avez pas besoin d'implémenter cet événement. Si vous ajoutez des rôles à la liste UserRoles dans l'événement OnUserAuthenticate, ces rôles seuls peuvent alors être utilisés pour décider si l'utilisateur a la permission d'invoquer une méthode serveur donnée. Toutefois, si vous voulez avoir plus de contrôle sur le processus (tel que l'autorisation ou le refus de l'invocation selon l'heure de la journée), vous pouvez alors implémenter cet événement. Un objet, contenant des informations telles que le nom d'utilisateur, la liste UserRoles remplie dans l'événement d'authentification et les rôles autorisés / refusés pour la méthode appelée, est passé dans l'événement. Vous pouvez utiliser ces informations, ainsi que toute autre information de votre choix, pour décider si vous voulez définir la valeur de valid sur True ou False, ce qui autorisera ou refusera l'invocation de la méthode.

Voir aussi