Propagation d'un objet sérialisable personnalisé Java pour la propagation des attributs de sécurité
Ce document explique comment ajouter un objet dans le sujet à partir d'un module de connexion et comment se doter d'une infrastructure permettant la propagation de l'objet Java™.
Avant de commencer
Pourquoi et quand exécuter cette tâche
Procédure
- Ajoutez l'objet Java personnalisé dans le sujet à partir d'un module de connexion personnalisé. Il existe un processus en deux phases pour chaque module de connexion JAASS (Java Authentication and Authorization Service). WebSphere Application Server réalise les processus suivants pour chacun des modules de connexion présents dans la configuration :
- méthode de connexion
- Cette étape consiste en l'analyse des rappels de configuration de connexion, si nécessaire, et en la création de nouveaux objets ou justificatifs.
- méthode de validation
- Les objets ou justificatifs créés pendant la connexion sont ajoutés au sujet.
Une fois qu'un objet Java personnalisé est ajouté au sujet, WebSphere Application Server sérialise et désérialise l'objet sur le serveur d'origine, et le rajoute au sujet en aval. Toutefois, ce processus ne peut se réaliser correctement qu'à certaines conditions. Pour plus d'informations sur le modèle de programmation JAAS, consultez les informations relatives à JAAS dans l'article Sécurité : Ressources d'apprentissage.Important : Lorsque vous connectez un module de connexion personnalisée dans l'infrastructure de connexion WebSphere Application Server, assurez-vous que le code est digne de confiance. Lorsque vous ajoutez les classes au fichier d'archive Java (JAR) et que vous ajoutez le fichier au répertoire racine_serveur_app/lib/ext/, le module de connexion dispose des droits AllPermissions de la sécurité Java 2. Il est recommandé d'ajouter votre module de connexion et les autres classes d'infrastructure dans un répertoire privé. Toutefois, vous devez modifier le fichier racine_profil/properties/server.policy pour vous assurer que votre répertoire privé, le fichier d'archive Java (JAR) ou les deux disposent des autorisations nécessaires pour exécuter les API appelées à partir du module de connexion. Le module de connexion pouvant être exécuté après le code de l'application sur la pile d'appels, vous pouvez éventuellement ajouter le code doPrivileged de façon à ne pas avoir besoin d'ajouter de propriétés supplémentaires à vos applications.
Important : Lorsque vous connectez un module de connexion personnalisée dans l'infrastructure de connexion WebSphere Application Server, assurez-vous que le code est digne de confiance. Lorsque vous ajoutez le module de connexion au répertoire racine_profil/classes, il dispose des droits AllPermissions de la sécurité Java 2. Pour plus d'informations, voir Création d'un sous-répertoire de classes dans votre profil pour les classes personnalisées.. Cependant, le module de connexion pouvant être exécuté après le code de l'application sur la pile d'appels, vous pouvez éventuellement ajouter le code doPrivileged de façon à ne pas avoir besoin d'ajouter de propriétés supplémentaires à vos applications.
L'exemple de code suivant illustre comment ajouter le code doPrivileged. Pour plus d'informations sur les actions à effectuer pendant l'initialisation, la connexion et la validation, voir Développement de modules de connexion personnalisés pour une configuration de connexion système pour JAAS.public customLoginModule() { public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { } public boolean login() throws LoginException { // Construct callback for the WSTokenHolderCallback so that you // can determine if // your custom object has propagated Callback callbacks[] = new Callback[1]; callbacks[0] = new WSTokenHolderCallback("Authz Token List: "); try { _callbackHandler.handle(callbacks); } catch (Exception e) { throw new LoginException (e.getLocalizedMessage()); } // Checks to see if any information is propagated into this login List authzTokenList = ((WSTokenHolderCallback) callbacks[1]). getTokenHolderList(); if (authzTokenList != null) { for (int i = 0; i< authzTokenList.size(); i++) { TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i); // Look for your custom object. Make sure you use // "startsWith"because there is some data appended // to the end of the name indicating in which Subject // Set it belongs. Example from getName(): // "com.acme.CustomObject (1)". The class name is // generated at the sending side by calling the // object.getClass().getName() method. If this object // is deserialized by WebSphere Application Server, // then return it and you do not need to add it here. // Otherwise, you can add it below. // Note: If your class appears in this list and does // not use custom serialization (for example, an // implementation of the Token interface described in // the Propagation Token Framework), then WebSphere // Application Server automatically deserializes the // Java object for you. You might just return here if // it is found in the list. if (tokenHolder.getName().startsWith("com.acme.CustomObject")) return true; } } // If you get to this point, then your custom object has not propagated myCustomObject = new com.acme.CustomObject(); myCustomObject.put("mykey", "mydata"); } public boolean commit() throws LoginException { try { // Assigns a reference to a final variable so it can be used in // the doPrivileged block final com.acme.CustomObject myCustomObjectFinal = myCustomObject; // Prevents your applications from needing a JAAS getPrivateCredential // permission. java.security.AccessController.doPrivileged(new java.security. PrivilegedExceptionAction() { public Object run() throws java.lang.Exception { // Try not to add a null object to the Subject or an object // that already exists. if (myCustomObjectFinal != null && !subject.getPrivateCredentials(). contains(myCustomObjectFinal)) { // This call requires a special Java 2 Security permission, // see the JAAS application programming interface (API) // documentation. subject.getPrivateCredentials().add(myCustomObjectFinal); } return null; } }); } catch (java.security.PrivilegedActionException e) { // Wraps the exception in a WSLoginFailedException java.lang.Throwable myException = e.getException(); throw new WSLoginFailedException (myException.getMessage(), myException); } } // Defines your login module variables com.acme.CustomObject myCustomObject = null; }
- Vérifiez que votre classe Java personnalisée implémente l'interface java.io.Serializable. Pour qu'un objet puisse être propagé, il doit être ajouté au sujet sérialisé. Par exemple, l'objet doit implémenter l'interface java.io.Serializable. Si l'objet n'est pas sérialisé, la demande n'échoue pas mais l'objet n'est pas propagé. Pour qu'un objet ajouté au sujet soit propagé, implémentez l'une des interfaces de jeton définies dans les Propagation des attributs de sécurité ou ajoutez les attributs à l'une des implémentations de jeton par défaut existantes suivantes :
- AuthorizationToken
- Ajoutez des attributs s'ils sont propres à l'utilisateur. Pour plus d'informations, voir Utilisation du jeton d'autorisation par défaut pour propager les attributs de sécurité.
- PropagationToken
- Ajoutez des attributs propres à une commande d'appel. Pour plus d'informations, voir Utilisation du jeton de propagation par défaut pour propager les attributs de sécurité.
Si vous faites bien attention en ajoutant les objets personnalisés et suivez toutes les étapes pour vous assurer que WebSphere Application Server puisse sérialiser et désérialiser l'objet à chaque tronçon, l'utilisation d'objets Java personnalisés suffit.
- Vérifiez que votre classe Javapersonnalisée existe sur tous les systèmes
susceptibles de recevoir la demande.
Lorsque vous ajoutez un objet personnalisé au sujet dans l'intention de le faire propager par WebSphere Application Server, regroupez les définitions de classe dans un fichier d'archive Java (JAR), puis ajoutez le fichier au répertoire racine_serveur_app/lib/ext/ sur tous les noeuds où une sérialisation ou une désérialisation peut se produire. De même, vérifiez que les versions de classe Java sont identiques.
Lorsque vous ajoutez un objet personnalisé au sujet dans l'intention de le faire propager par WebSphere Application Server, assurez-vous que la définition de classe pour cet objet personnalisé est présente dans le répertoire racine_profil/classes sur tous les noeuds où une sérialisation ou une désérialisation peut se produire. De même, vérifiez que les versions de classe Java sont identiques.
- Vérifiez que votre module de connexion personnalisé est configuré dans toutes les configurations de connexion utilisées dans l'environnement où vous devez ajouter l'objet personnalisé lors d'une connexion. Toute configuration de connexion interagissant avec WebSphere Application Server génère un sujet qui peut être propagé en communication sortante pour une demande EJB (Enterprise JavaBeans). Si vous souhaitez que WebSphere Application Server propage un objet personnalisé dans tous les cas, assurez-vous que le module de connexion personnalisé est ajouté à chaque configuration de connexion utilisée dans votre environnement. Pour plus d'informations, voir Développement de modules de connexion personnalisés pour une configuration de connexion système pour JAAS.
- Vérifiez que la propagation des attributs de sécurité est activée sur tous les serveurs en aval qui reçoivent les informations propagées. Lorsqu'une demande EJB est envoyée à un serveur en aval alors que la propagation des attributs de sécurité est désactivée sur ce serveur, seul le jeton d'authentification est envoyé pour la compatibilité amont. Par conséquent, vous devez vérifier la configuration pour vous assurer que la propagation est activée dans toutes les cellules susceptibles de recevoir les demandes. Vous devez vérifier plusieurs paramètres de la console d'administration pour vous assurer que la propagation est entièrement activée. Pour plus d'informations, voir Propagation des attributs de sécurité parmi les serveurs d'applications.
- Ajoutez à la liste d'exclusion de propagation les objets personnalisés que vous ne souhaitez pas propager. Vous pouvez configurer une propriété de manière à ce qu'elle exclue la propagation des objets correspondant à des noms de classe et de modules spécifiques. Par exemple, vous pouvez associer un objet à un processus spécifique. Si l'objet est propagé, il ne contient pas d'informations valides. Vous devez indiquer à WebSphere Application Server de ne pas propager cet objet. Suivez la procédure ci-après pour définir l'objet dans la liste d'exclusion de propagation à l'aide de la console d'administration :
- Click Security > Global security > Custom properties > New.
- Entrez com.ibm.ws.security.propagationExcludeList dans la zone Nom.
- Entrez le nom de l'objet personnalisé dans la zone Valeur. Vous pouvez entrer une liste d'objets personnalisés dans la liste d'exclusion de
propagation, en séparant chaque entrée par un signe deux-points (:). Par exemple, com.acme.CustomLocalObject:com.acme.private.*.
Vous pouvez entrer un nom de classe tel que com.acme.CustomLocalObject ou un nom de module tel
que com.acme.private.*. Dans cet exemple, WebSphere Application
Server ne propage aucune classe équivalente à com.acme.CustomLocalObject ou commençant par com.acme.private.
Bien qu'il soit possible d'ajouter des objets personnalisés à la liste d'exclusion de propagation, vous devez prendre en compte les effets générés. WebSphere Application Server stocke le jeton opaque ou le contenu du sujet sérialisé dans une mémoire cache locale pendant toute la durée de vie du jeton de connexion unique (SSO). La durée de vie du jeton SSO, qui est par défaut de deux heures, est configurée dans les propriétés SSO de la console d'administration. Les informations ajoutées au jeton opaque incluent uniquement des objets qui ne figurent pas dans la liste d'exclusion.
Vérifiez que votre valeur de délai d'attente de jeton SSO est supérieure à celle du délai d'attente de la mémoire cache d'authentification. Pour modifier la mémoire cache d'authentification, voir la documentation concernant ses paramètres.
Résultats


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