Développement de l'interface UserRegistry pour l'utilisation des registres personnalisés
L'implémentation de cette interface permet à la sécurité WebSphere Application Server d'utiliser des registres personnalisés. Cette fonction étend le fichier java.rmi. Si vous utilisez un registre éloigné, vous pouvez effectuer cette procédure à distance.
Pourquoi et quand exécuter cette tâche
Fournissez des implémentation des méthodes suivantes.
Procédure
- Initialisez la méthode UserRegistry, avec initialize(java.util.Properties).
Cette méthode est appelée pour initialiser la méthode UserRegistry. Toutes les propriétés définies dans le panneau Registres d'utilisateurs personnalisés se propagent vers cette méthode.public void initialize(java.util.Properties props) throws CustomRegistryException, RemoteException;
Pour le fichier exemple FileRegistrySample.java, la méthode d'initialisation extrait les noms des fichiers du registre contenant les informations sur les utilisateurs et les groupes.
Cette méthode est appelée lors du lancement du serveur pour initialiser le registre. Cette méthode est également appelée lorsque la validation est effectuée par la console d'administration, si la sécurité est activée. Cette méthode est identique à celle de la version 4.
- Authentifiez les utilisateurs avec checkPassword(String,String).
La méthode checkPassword est appelée pour authentifier les utilisateurs au moment où ils se connectent à l'aide d'un nom ou d'un ID utilisateur et d'un mot de passe. Elle renvoie une chaîne qui, dans la majorité des cas, correspond au nom de sécurité de l'utilisateur. Un justificatif est créé pour l'utilisateur à des fins d'authentification. Le nom d'utilisateur est également renvoyé pour l'appel du bean enterprise getCallerPrincipal et le servlet appelle les méthodes getUserPrincipal et getRemoteUser. Pour obtenir plus d'informations sur l'utilisation de noms d'affichage dans le registre, voir la méthode getUserDisplayName. Dans certaines situations, si vous renvoyez un utilisateur différent de celui qui est connecté, vous devez vérifier que l'utilisateur est défini dans le registre.public String checkPassword(String userSecurityName, String password) throws PasswordCheckFailedException CustomRegistryException, RemoteException;
Dans le fichier exemple FileRegistrySample.java, la méthode mapCertificate extrait le nom distinctif (DN) de la hiérarchie de certificats et vérifie s'il s'agit d'un utilisateur valide défini dans le registre avant de renvoyer l'utilisateur. Dans l'exemple, la méthode checkPassword vérifie l'association du nom et du mot de passe dans le registre d'utilisateurs et, s'ils concordent, renvoie l'utilisateur en cours d'authentification.
Cette méthode est appelée pour divers scénarios, par exemple, par la console d'administration pour valider les informations sur l'utilisateur, une fois le registre d'utilisateurs initialisé. Cette méthode est également appelée lorsque vous accédez à des ressources protégées du produit pour authentifier l'utilisateur avant de traiter l'autorisation. Cette méthode est identique à celle de la version 4.x.
- Obtenez les noms d'utilisateur à partir des certificats X.509 avec mapCertificate(X509Certificate[]).
La méthode mapCertificate est appelée pour obtenir un nom d'utilisateur d'une hiérarchie de certificats X.509 fournie par le navigateur. L'ensemble de la hiérarchie de certificats est transmise à cette méthode et l'implémentation peut valider la hiérarchie et extraire les informations utilisateur. Un justificatif est créé pour l'utilisateur à des fins d'authentification. Si les certificats de navigateur ne sont pas pris en charge dans la configuration, vous pouvez créer l'exception CertificateMapNotSupportedException. Lorsque les certificats ne sont pas pris en charge, l'authentification échoue si la demande d'authentification s'effectue par certificat, même si le navigateur dispose de certificats valides.public String mapCertificate(X509Certificate[] cert) throws CertificateMapNotSupportedException, CertificateMapFailedException, CustomRegistryException, RemoteException;
Cette méthode est appelée lorsque les certificats sont fournis pour l'authentification. Pour les applications Web, lorsque les contraintes d'authentification sont définies sur CLIENT-CERT dans le fichier web.xml de l'application, cette méthode est appelée pour mapper un certificat sur un utilisateur valide dans le registre. Avec les clients Java™, cette méthode est appelée pour mapper les certificats clients dans la couche de transport, lors de l'utilisation de l'authentification par couche de transport. Lorsque le jeton de vérification d'identité, lors de l'utilisation du protocole d'authentification CSIv2, doit contenir des certificats, cette méthode est appelée pour mapper les certificats à un utilisateur valide.
Dans WebSphere Application Server version 4.x, le paramètre d'entrée est le certificat X509Certificate. Dans WebSphere Application Server versions 5.x et ultérieures, ce paramètre est modifié pour accepter une série de certificats X509Certificate, telle qu'une hiérarchie de certificats. Dans la version 4.x, ce paramètre est appelé pour des applications Web uniquement, mais dans la version 5.x et ultérieures, vous pouvez appeler cette méthode pour les clients Web et Java.
- Obtenez le nom de domaine de sécurité avec getRealm.
La méthode getRealm est appelée pour extraire le nom du domaine de sécurité. Ce nom identifie le domaine de sécurité pour lequel le registre authentifie les utilisateurs. Si cette méthode renvoie une valeur null, le nom par défaut customRealm est utilisé.public String getRealm() throws CustomRegistryException, RemoteException;
Dans le fichier exemple FileRegistrySample.java, la méthode getRealm renvoie la chaîne customRealm. L'un de ces appels à la méthode est effectué lorsque les informations du registre d'utilisateurs sont validées. Cette méthode est identique à celle de la version 4.x.
- Obtenez la liste des utilisateurs à partir du registre avec getUsers(String,int).
La méthode getUsers renvoie la liste des utilisateurs du registre. Les noms des utilisateurs dépendent du paramètre de masque de recherche. Le nombre d'utilisateurs est limité par la valeur du paramètre de limite. Dans un registre comportant de nombreux utilisateurs, il n'est pas facile d'extraire tous les utilisateurs. Le paramètre de limite a été défini pour limiter le nombre d'utilisateurs extraits du registre. La limite zéro (0) indique que tous les utilisateurs correspondant au masque doivent être renvoyés. Cette valeur peut provoquer des erreurs dans le cas de registres volumineux. Vous devez utiliser cette limite avec précaution.public Result getUsers(String pattern, int limit) throws CustomRegistryException, RemoteException;
Les implémentations des registres personnalisés doivent au moins prendre en charge le caractère générique (*). Par exemple, le masque (*) renvoie tous les utilisateurs et le masque (b*) renvoie les utilisateurs dont le nom commence par b.
Le paramètre de retour est un objet de type com.ibm.websphere.security.Result. Cet objet contient deux attributs, java.util.List et java.lang.boolean. La liste contient les utilisateurs renvoyés et l'indicateur booléen spécifie si d'autres utilisateurs sont disponibles dans le registre d'utilisateurs pour le masque de recherche. Cet indicateur permet de spécifier au client s'il existe d'autres utilisateurs disponibles dans le registre.
Dans le fichier exemple FileRegistrySample.java, la commande getUsers extrait le nombre d'utilisateurs requis du registre d'utilisateurs et les présente sous forme de liste dans l'objet Result. Pour déterminer si le nombre d'utilisateurs est supérieur à la valeur demandée, l'exemple extrait un utilisateur supplémentaire par rapport au nombre demandé et si cet utilisateur est trouvé, il affecte la valeur true à l'indicateur booléen. Pour la concordance du masque, la méthode de concordance de la classe RegExpSample est utilisée. Elle prend en charge les caractères génériques, tels que l'astérisque (*) et le point d'interrogation (?).
Cette méthode est appelée par la console d'administration pour ajouter des utilisateurs aux rôles dans les différents panneaux correspondants. La console d'administration utilise la valeur booléenne définie dans l'objet Résultat pour indiquer que des entrées supplémentaires correspondant au masque sont disponibles dans le registre d'utilisateurs.
Dans WebSphere Application Server version 4.x, cette méthode indique de n'utiliser que le paramètre de masque. Une liste est renvoyée. Dans WebSphere Application Server version 5.x ou suivante, cette méthode a été modifiée pour accepter un deuxième paramètre, qui indique une limite. Pour optimiser son fonctionnement, votre implémentation est modifiée pour accepter la valeur limite et restreindre le nombre d'utilisateurs renvoyés. La procédure de renvoi est modifiée pour renvoyer un objet Résultat sous forme de liste et un indicateur spécifiant s'il existe des entrées supplémentaires. Lors du renvoi de la liste, utilisez la méthode Result.setList(List) pour définir la liste dans l'objet Résultat. Si le nombre d'entrées est supérieur au nombre demandé dans le paramètre limite, affectez la valeur true à l'attribut booléen dans l'objet de résultat, à l'aide de la méthode Result.setHasMore. La valeur par défaut de l'attribut booléen dans l'objet de résultat est false.
- Obtenez le nom d'affichage d'un utilisateur avec getUserDisplayName(String).
La méthode getUserDisplayName renvoie le nom affiché d'un utilisateur, s'il a été défini. Le nom affiché est une chaîne facultative qui décrit l'utilisateur et que vous pouvez définir dans certains registres. Ce nom descriptif est destiné à l'utilisateur et peut déjà exister dans le registre.public String getUserDisplayName(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Par exemple, dans les systèmes IBM® i, vous pouvez afficher le texte descriptif du profil utilisateur.
Par exemple, sous Windows, vous pouvez afficher le nom complet de l'utilisateur.
Si vous n'avez pas besoin d'utiliser les noms affichés dans votre registre, renvoyez la valeur null ou une chaîne vide pour cette méthode.
S'il existait des noms d'affichage pour un utilisateur de WebSphere Application Server version 4.x, ces noms étaient utiles pour l'appel de méthode d'EJB getCallerPrincipal et les appels de servlet getUserPrincipal et getRemoteUser. Si les noms d'affichage ne sont pas identiques aux noms de sécurité des utilisateurs, ils sont renvoyés pour les méthodes de beans entreprise et de servlet mentionnées précédemment. Le renvoi des noms d'affichage pour ces méthodes peut devenir problématique dans certaines situations car les noms affichées ne sont pas forcément uniques dans le registre d'utilisateurs. Vous pouvez éviter cet incident en modifiant le comportement par défaut afin que le nom de sécurité de l'utilisateur soit renvoyé à la place de son nom d'affichage dans cette version du produit. Pour plus d'informations sur la définition des propriétés du registre personnalisé, voir la section Définition des propriétés des registres personnalisés.
Dans le fichier exemple FileRegistrySample.java, cette méthode renvoie le nom d'affichage de l'utilisateur dont le nom correspond au nom fourni. Si le nom d'affichage n'existe pas, une chaîne vide est renvoyée.
Cette méthode peut être appelée par le produit pour présenter les noms d'affichage dans la console d'administration ou via la ligne de commande, à l'aide de l'outil wsadmin. Utilisez cette méthode uniquement pour l'affichage. Cette méthode est identique à celle de la version 4.x.
- Obtenez l'ID unique d'un utilisateur avec getUniqueUserId(String).
Cette méthode renvoie l'ID unique de l'utilisateur, en fonction du nom de sécurité.public String getUniqueUserId(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Dans le fichier exemple FileRegistrySample.java, cette méthode renvoie la valeur uniqueUserId de l'utilisateur dont le nom correspond au nom fourni. Cette méthode est appelée lors de la création des droits d'un utilisateur et de la table des autorisations de l'application.
- Obtenez le nom de sécurité d'un utilisateur avec getUserSecurityName(String).
Cette méthode renvoie le nom de sécurité d'un utilisateur en fonction de l'ID unique. Dans le fichier exemple FileRegistrySample.java, cette méthode renvoie le nom de sécurité de l'utilisateur dont l'ID unique correspond à l'ID fourni.public String getUserSecurityName(String uniqueUserId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Cette méthode est appelée pour vérifier qu'il existe bien un utilisateur valide correspondant à L'ID utilisateur unique. Cette méthode est appelée pour obtenir le nom de sécurité de l'utilisateur lorsque l'ID utilisateur unique est extrait d'un jeton.
- Vérifiez si un utilisateur indiqué est un utilisateur valide dans le registre avec
isValidUser(String).
Cette méthode indique si l'utilisateur est un utilisateur valide dans le registre.public boolean isValidUser(String userSecurityName) throws CustomRegistryException, RemoteException;
Dans le fichier exemple FileRegistrySample.java, cette méthode renvoie true si l'utilisateur est défini dans le registre. Dans le cas contraire, cette méthode renvoie false. En règle générale, elle est appelée lorsqu'il importe de déterminer si l'utilisateur existe dans l'annuaire afin d'éviter les problèmes ultérieurement. Par exemple, dans l'appel mapCertificate, si le nom est extrait du certificat et que l'utilisateur ne correspond pas à un utilisateur valide du registre d'utilisateurs, vous pouvez éviter de tenter de créer le justificatif de l'utilisateur.
- Renvoyez la liste des groupes à partir du registre d'utilisateurs avec getGroups(String,int).
La méthode getGroups renvoie la liste des groupes du registre d'utilisateurs. Les noms des groupes dépendent du paramètre de masque de recherche. Le nombre des groupes est limité par la valeur du paramètre de limite. Dans un registre comportant de nombreux groupes, il n'est pas facile d'extraire tous les groupes. Le paramètre indiquant une limite a été défini pour limiter le nombre de groupes extraits du registre d'utilisateurs. La limite zéro (0) indique que tous les groupes correspondant au masque doivent être renvoyés. Cette valeur peut générer des incidents pour les registres d'utilisateurs volumineux. Vous devez utiliser cette limite avec précaution. Les implémentations des registres personnalisés doivent au moins prendre en charge le caractère générique (*). Par exemple, le masque (*) renvoie tous les utilisateurs et le masque (b*) renvoie les utilisateurs dont le nom commence par b.public Result getGroups(String pattern, int limit) throws CustomRegistryException, RemoteException;
Le paramètre de retour est un objet de type com.ibm.websphere.security.Result. Cet objet contient les attributs java.util.List et java.lang.boolean. La liste contient les groupes renvoyés et l'indicateur booléen spécifie si d'autres groupes sont disponibles dans le registre d'utilisateurs pour le masque recherché. Cet indicateur permet de spécifier au client s'il existe d'autres groupes disponibles dans le registre.
Dans le fichier exemple FileRegistrySample.java, la méthode getUsers extrait le nombre de groupes requis du registre d'utilisateurs et les présente sous forme de liste dans l'objet Result. Pour déterminer si le nombre de groupes est supérieur à la valeur demandée, l'exemple extrait un utilisateur supplémentaire par rapport au nombre demandé et si cet utilisateur est trouvé, il affecte la valeur true à l'indicateur booléen. Pour la concordance du masque, la méthode de concordance de la classe RegExpSample est utilisée. Elle prend en charge l'astérisque (*) et le point d'interrogation (?) .
Cette méthode est appelée par la console d'administration pour ajouter des groupes aux rôles dans les différents panneaux correspondants. La console d'administration utilise la valeur booléenne définie dans l'objet Résultat pour indiquer que des entrées supplémentaires correspondant au masque sont disponibles dans le registre d'utilisateurs.
Dans WebSphere Application Server version 4, cette méthode n'accepte que le paramètre de masque et renvoie une liste. Dans WebSphere Application Server version 5.x ou suivante, cette méthode a été modifiée pour accepter le paramètre qui indique la limite. Modifiez votre implémentation pour accepter la valeur limite et restreindre le nombre d'utilisateurs renvoyés. La procédure de renvoi est modifiée pour renvoyer un objet Résultat sous forme de liste et un indicateur spécifiant s'il existe des entrées supplémentaires. Utilisez la méthode Result.setList(List) pour définir la liste dans l'objet Résultat. Si le nombre d'entrées est supérieur au nombre demandé dans le paramètre limite, affectez la valeur true à l'attribut booléen dans l'objet Résultat, à l'aide de la méthode Result.setHasMore. La valeur par défaut de l'attribut booléen dans l'objet de résultat est false.
- Obtenez le nom d'affichage d'un groupe avec getGroupDisplayName(String).
La méthode getGroupDisplayName renvoie le nom d'affichage d'un groupe, s'il en existe un. Le nom d'affichage est une chaîne facultative qui décrit le groupe et que vous pouvez définir dans certains registres d'utilisateurs. Il s'agit d'un nom descriptif pouvant déjà exister dans le registre. Si vous n'avez pas besoin de noms d'affichage dans votre registre, entrez la valeur null ou ne spécifiez aucune valeur pour cette méthode.public String getGroupDisplayName(String groupSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Dans le fichier exemple FileRegistrySample.java, cette méthode renvoie le nom d'affichage de l'utilisateur dont le nom correspond au nom fourni. Si le nom d'affichage n'existe pas, une chaîne vide est renvoyée.
Cette méthode peut être appelée par le produit pour présenter les noms d'affichage via la console d'administration ou via la ligne de commande, à l'aide de l'outil wsadmin. Cette méthode est utilisée uniquement pour l'affichage.
- Obtenez l'ID unique d'un groupe avec getUniqueGroupId(String).
Cette méthode renvoie l'ID unique du groupe auquel est affecté le nom de sécurité.public String getUniqueGroupId(String groupSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Dans ce fichier exemple FileRegistrySample.java, cette méthode renvoie le nom de sécurité du groupe dont l'ID unique correspond à l'ID fourni. Cette méthode vérifie qu'il existe bien un groupe valide correspondant à L'ID uniqueGroupId.
- Obtenez les ID unique de tous les groupes auxquels appartient un utilisateur
avec getUniqueGroupIds(String).
Cette méthode renvoie les ID uniques de tous les groupes auxquels un utilisateur appartient.public List getUniqueGroupIds(String uniqueUserId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Dans le fichier exemple FileRegistrySample.java, cette méthode renvoie l'ID unique de tous les groupes contenant cet ID uniqueUserID. Cette méthode est appelée lors de la création des justificatifs de l'utilisateur. Lors de la création du justificatif, tous les ID groupUniqueIds auxquels appartient cet utilisateur sont collectés et placés dans le justificatif pour obtenir l'autorisation nécessaire lorsque les groupes accèdent à une ressource.
- Obtenez le nom de sécurité d'un groupe avec getGroupSecurityName(String).
Cette méthode renvoie le nom de sécurité d'un groupe en fonction de son ID unique.public String getGroupSecurityName(String uniqueGroupId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Dans ce fichier exemple FileRegistrySample.java, cette méthode renvoie le nom de sécurité du groupe dont l'ID unique correspond à l'ID fourni. Cette méthode vérifie qu'il existe bien un groupe valide correspondant à L'ID uniqueGroupId.
- Déterminez si un groupe est un groupe valide dans le registre avec
isValidGroup(String).
Cette méthode indique si un groupe correspond à un groupe valide dans le registre.public boolean isValidGroup(String groupSecurityName) throws CustomRegistryException, RemoteException;
Dans le fichier exemple FileRegistrySample.java, cette méthode renvoie la valeur true si le groupe est défini dans le registre. Dans le cas contraire, la méthode renvoie la valeur false. Vous pouvez utiliser cette méthode dans des situations où il est important de déterminer si le groupe existe dans l'annuaire pour éviter les problèmes ultérieurement.
- Obtenez tous les groupes auxquels un utilisateur appartient avec getGroupsForUser(String).
Cette méthode renvoie tous les groupes auxquels appartient un utilisateur dont le nom correspond à la valeur indiquée. Cette méthode est similaire à la méthode getUniqueGroupIds sauf que les noms de sécurité sont utilisés et non les ID uniques.public List getGroupsForUser(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
Dans le fichier exemple FileRegistrySample.java, cette méthode renvoie tous les noms de sécurité des groupes qui contiennent le nom userSecurityName.
Cette méthode est appelée par la console d'administration ou l'outil de scriptage pour vérifier que les utilisateurs indiqués pour les rôles RunAs font déjà partie de ce rôle dans le mappage établi entre les utilisateurs, les groupes et les rôles. Cette vérification est nécessaire pour s'assurer qu'un utilisateur ne peut être ajouté à un rôle RunAs, sauf si on lui a attribué ce rôle directement ou indirectement via un groupe contenant cet utilisateur, lors du mappage des utilisateurs/groupes à des rôles. Le groupe auquel appartient cet utilisateur peut faire partie du rôle dans le mappage des utilisateurs/groupes aux rôles. Cette méthode est donc appelée pour vérifier si l'un des groupes auxquels cet utilisateur appartient est mappé à ce rôle.
- Extrait les utilisateurs d'un groupe indiqué avec getUsersForGroup(String,int).
Cette méthode extrait les utilisateurs du groupe indiqué. Le nombre d'utilisateurs renvoyés est limité par le paramètre de limite. La limite zéro (0) indique que tous les utilisateurs de ce groupe doivent être renvoyés. Cette méthode n'est pas appelée directement par le composant de sécurité de WebSphere Application Server. Toutefois, elle peut être appelée par d'autres composants. Si, dans de très rares cas, vous utilisez un registre duquel il n'est pas facile d'extraire tous les utilisateurs de l'un de vos groupes, vous pouvez créer l'exception NotImplementedException pour ce groupe. Dans ce cas, vérifiez que si Process Choreographer est installé, les attributions d'équipe ne sont pas définies à l'aide de ces groupes particuliers. S'il n'est pas nécessaire de renvoyer les utilisateurs du groupe dans le registre d'utilisateurs, il est recommandé de ne pas créer l'exception NotImplemented lors de l'implémentation de cette méthode.public Result getUsersForGroup(String groupSecurityName, int limit) throws NotImplementedException, EntryNotFoundException, CustomRegistryException, RemoteException;
Le paramètre de retour est un objet de type com.ibm.websphere.security.Result. Cet objet contient les attributs java.util.List et java.lang.boolean. La liste contient les utilisateurs renvoyés et l'indicateur booléen, qui spécifie si d'autres utilisateurs sont disponibles dans le registre d'utilisateurs pour le masque de recherche. Cet indicateur booléen montre au client si des utilisateurs sont disponibles dans le registre d'utilisateurs.
Dans l'exemple, cette méthode extrait un utilisateur de plus que le nombre d'utilisateurs demandé pour un groupe, si la valeur zéro (0) n'est pas attribuée au paramètre de limite. Si la méthode parvient à extraire un utilisateur de plus, la valeur true est attribuée à l'indicateur booléen.
Dans WebSphere Application Server version 4, cette méthode getUsers est obligatoire pour le produit. Dans WebSphere Application Server version 5.x ou suivante, cette méthode peut créer l'exception NotImplementedException lorsqu'il n'est pas facile d'extraire l'ensemble d'utilisateurs demandé. Toutefois, cette exception doit être créée rarement, car cette action peut affecter d'autres composants. Dans la version 4, cette méthode accepte uniquement le paramètre de masque de recherche et renvoie une liste. Dans la version 5, cette méthode accepte le paramètre limite. Modifiez votre implémentation pour accepter la valeur limite et restreindre le nombre d'utilisateurs renvoyés. La procédure de renvoi est modifiée pour renvoyer un objet Résultat sous forme de liste et un indicateur spécifiant s'il existe des entrées supplémentaires. Lors du renvoi de la liste, utilisez la méthode Result.setList(List) pour définir la liste dans l'objet Résultat. Si le nombre d'entrées est supérieur au nombre demandé dans le paramètre limite, affectez la valeur true à l'attribut booléen dans l'objet Résultat, à l'aide de la méthode Result.setHasMore. La valeur par défaut de l'attribut booléen dans l'objet de résultat est false.
- Implémentez la méthode createCredential(String). Avertissement : Les deux premières lignes de l'exemple de code suivant sont scindées à des fins d'illustration.
Dans cette version de WebSphere Application Server, la méthode createCredential n'est pas appelée. Vous pouvez renvoyer une valeurnull. Dans l'exemple, une valeur null est renvoyée.public com.ibm.websphere.security.cred.WSCredential createCredential(String userSecurityName) throws NotImplementedException, EntryNotFoundException, CustomRegistryException, RemoteException;
Que faire ensuite


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_users
Nom du fichier : tsec_users.html