Un jeton de propagation par défaut est situé sur l'unité d'exécution des
applications et l'infrastructure de sécurité à utiliser. Le produit
propage ce jeton de propagation par défaut en aval et le jeton reste sur l'unité
d'exécution où l'appel arrive à chaque tronçon.
Pourquoi et quand exécuter cette tâche
Les données sont disponibles
depuis le conteneur de toute ressource où le jeton de propagation arrive. Pour que la propagation aboutisse, n'oubliez pas que vous devez activer la fonction de
propagation au niveau de chaque serveur où une demande est envoyée. Veillez à bien
activer la propagation des attributs de sécurité pour toutes les cellules de votre
environnement où la propagation doit être effectuée.
Il existe une classe WSSecurityHelper qui comporte
des API pour accéder aux attributs de PropagationToken.
Cette rubrique décrit les scénarios
d'utilisation et inclut des exemples. Il existe une relation étroite entre le jeton de
propagation et la fonction de la zone de travail. La différence principale entre elles
réside dans le fait que si vous ajoutez des attributs au jeton de propagation, ceux-ci ne
peuvent pas être modifiés. Vous ne pouvez pas modifier ces attributs de façon à ce que le module d'exécution de sécurité puisse ajouter des informations auditables et que ces informations restent là pendant la durée de vie de l'appel. Chaque fois que vous ajoutez un
attribut à une clé spécifique, un objet ArrayList est stocké pour conserver cet attribut.
Tout nouvel attribut ajouté avec la même clé est ajouté à l'objet ArrayList. Lorsque vous
appelez getAttributes, l'objet ArrayList est converti en tableau de type "chaîne de
caractères" et l'ordre est préservé. Le premier élément de ce tableau est le premier
attribut ajouté pour cette clé spécifique.
Un indicateur de modification est
conservé dans le jeton de propagation par défaut ; il consigne toutes les modifications
apportées au jeton. Ces modifications sont suivies afin de permettre à WebSphere
Application Server
de savoir quand renvoyer les informations d'authentification en aval pour que le serveur en aval les reçoive. En général, CSIv2 (Common Secure Interoperability Version 2)
maintient une session entre les serveurs pour un client authentifié. Si le
jeton de propagation est modifié, une nouvelle session est générée et une nouvelle authentification se
produit.
Les modifications fréquentes du jeton de propagation en cours de méthode
entraînent des appels en aval fréquents. Si vous modifiez le jeton avant d'effectuer de
nombreux appels en aval et que vous modifiez encore le jeton entre chaque appel, les
performances de sécurité peuvent s'en trouver altérées.
- Obtention de la liste de serveurs à partir du jeton de propagation par défaut
Chaque fois que le jeton de propagation est diffusé et utilisé pour créer le sujet
authentifié, horizontalement ou en aval, le nom du serveur d'applications de réception
est consigné dans le jeton de propagation. Le format de l'hôte est
cellule:noeud:serveur, ce qui donne accès au nom de la cellule, du noeud et du serveur
de chaque serveur d'applications recevant cet appel.
Le code suivant fournit cette liste de noms et peut être appelé à partir d'une application Java™ 2
Platform, Enterprise Edition (J2EE).
Le format de chaque serveur de la liste est : cell:nom_noeud:nom_serveur.
Par exemple, la sortie est : myManager:node1:server1
String[] server_list = null;
// Si la sécurité est désactivée sur ce serveur d'applications, il n'est pas nécessaire
d'effectuer une vérification
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Extrait le tableau de type "chaîne de caractères" de la liste de serveurs
server_list = com.ibm.websphere.security.WSSecurityHelper.getServerList();
}
catch (Exception e)
{
// Exécute un traitement d'exception normal pour votre application
}
if (server_list != null)
{
// imprime chaque serveur de la liste ; server_list[0] est le premier serveur
for (int i=0; i<server_list.length; i++)
{
System.out.println("Server[" + i + "] = " + server_list[i]);
}
}
}
- Obtenez la liste des appelants, à l'aide de l'API getCallerList.
Un jeton de propagation par défaut est généré chaque fois qu'un utilisateur authentifié
est défini sur l'unité d'exécution ou que quelqu'un essaie d'ajouter des attributs au
jeton de propagation. Chaque fois qu'un utilisateur est défini sur l'unité d'exécution,
il est consigné dans le jeton de propagation par défaut. Il peut arriver qu'un même utilisateur soit connecté plusieurs fois si l'utilisateur
RunAs est différent de l'appelant. La liste suivante fournit les règles utilisées pour
déterminer si un utilisateur ajouté à l'unité d'exécution est consigné dans le jeton de
propagation :
- Le sujet en cours doit être authentifié. Les sujets non authentifiés ne sont pas
consignés.
- Le sujet authentifié en cours est consigné si un sujet n'a pas été consigné au
préalable.
- Le sujet authentifié en cours est consigné si le dernier sujet authentifié ne contient
pas le même utilisateur.
- Le sujet authentifié en cours est consigné sur chaque serveur d'applications unique
concerné par le processus de propagation.
L'exemple de code suivant montre comment utiliser l'API getCallerList.
Le format de chaque appelant de la liste est : cell:nom_noeud:nom_serveur:realm:numéro_port/securityName.
Par exemple, la sortie est monResponsable:noeud1:serveur1:ldap.austin.ibm.com:389/jsmith.
String[] caller_list = null;
// Si la sécurité est désactivée sur ce serveur d'applications, ne pas vérifier la liste d'appelants
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Extrait le tableau de type "chaîne de caractères" caller_list (liste d'appelants)
caller_list = com.ibm.websphere.security.WSSecurityHelper.getCallerList();
}
catch (Exception e)
{
// Exécute un traitement d'exception normal pour votre application
}
if (caller_list != null)
{
// Imprime chaque appelant de la liste ; caller_list[0] est le premier appelant
for (int i=0; i<caller_list.length;i++)
{
System.out.println("Caller[" + i + "] = " + caller_list[i]);
}
}
}
- Obtenez le nom de sécurité du premier utilisateur authentifié, à l'aide de l'API getFirst Caller.
Lorsque vous souhaitez savoir quel appelant authentifié a initié la demande, vous pouvez appeler la méthode getFirstCaller, qui analyse la liste des appelants. Notez cependant que cette méthode renvoie uniquement le nom de sécurité de l'appelant. Si
vous souhaitez en savoir davantage que le nom de sécurité, appelez la méthode getCallerList et
extrayez la première entrée du tableau de type "chaîne de caractères". Cette entrée
fournit la totalité des informations de l'appelant.
L'exemple de code suivant extrait le
nom de sécurité du premier appelant authentifié à l'aide de l'API getFirstCaller.
Par exemple, la sortie est :
jsmith.
String first_caller = null;
// Si la sécurité est désactivée sur ce serveur d'applications, il n'est pas nécessaire
d'effectuer une vérification
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Extrait le premier appelant
first_caller = com.ibm.websphere.security.WSSecurityHelper.getFirstCaller();
// Imprime le nom de l'appelant
System.out.println("Premier appelant : " + first_caller);
}
catch (Exception e)
{
// Exécute un traitement d'exception normal pour votre application
}
}
- Obtenez le nom du premier serveur d'applications pour une
demande, à l'aide de la méthode getFirstServer.
Chaque fois que vous souhaitez connaître le premier serveur d'applications pour cette
demande, appelez directement la méthode getFirstServer.
L'exemple de code suivant extrait
le nom du premier serveur d'applications à l'aide de l'API getFirstServer.
Par exemple, la sortie est : monResponsable:noeud1:serveur1.
String first_server = null;
// Si la sécurité est désactivée sur ce serveur d'applications, il n'est pas nécessaire
d'effectuer une vérification
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Extrait le premier serveur
first_server = com.ibm.websphere.security.WSSecurityHelper.getFirstServer();
// Imprime le nom du serveur
System.out.println("Premier serveur : " + first_server);
}
catch (Exception e)
{
// Exécute un traitement d'exception normal pour votre application
}
}
- Ajoutez des attributs personnalisés au jeton de propagation par défaut, à l'aide
de l'API addPropagationAttribute.
Vous pouvez ajouter des attributs personnalisés au jeton
de propagation par défaut à utiliser par l'application.
Ce jeton suit la demande en aval
de façon à ce que les attributs soient disponibles lorsqu'ils sont requis. Lorsque vous
utilisez le jeton de propagation par défaut pour ajouter des attributs, vous devez
comprendre les aspects suivants :
- L'ajout d'informations au jeton de propagation affecte le stockage en mémoire cache
de la session CSIv2. Veillez à ne par ajouter trop souvent d'informations entre les différentes demandes distantes.
- Une fois que des informations ont été ajoutées avec une clé spécifique, elles ne peuvent plus être supprimées.
- Vous pouvez ajouter un nombre de valeurs illimité à une clé spécifique. Toutes ces
valeurs doivent cependant être disponibles à partir d'un tableau de type "chaîne de
caractères" renvoyé, dans l'ordre où elles ont été ajoutées.
- Le jeton de propagation n'est disponible que sur les serveurs où la propagation et la
sécurité sont activées.
- L'attribut Java 2 Security javax.security.auth.AuthPermission wssecurity.addPropagationAttribute
est nécessaire pour extraire les attributs du jeton de propagation.
- Une application ne peut pas utiliser les clés qui commencent par com.ibm.websphere.security
ou com.ibm.wsspi.security. Ces préfixes sont réservés à une utilisation par le système.
L'exemple de code suivant montre comment utiliser l'API addPropagationAttribute.
// Si la sécurité est désactivée sur ce serveur d'applications,
// Ne pas vérifier l'état de la sécurité du serveur
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
// Indique la clé et les valeurs
String key = "maclé";
String value1 = "valeur1";
String value2 = "valeur2";
// Définit la clé et la valeur1
com.ibm.websphere.security.WSSecurityHelper.
addPropagationAttribute (clé, valeur1);
// Définit la clé et la valeur2
String[] previous_values = com.ibm.websphere.security.WSSecurityHelper.
addPropagationAttribute (clé, valeur2);
// Remarque : previous_values (valeurs précédentes) doit contenir la valeur1
}
catch (Exception e)
{
// Exécute un traitement d'exception normal pour votre application
}
}
- Obtenez vos attributs personnalisés à l'aide de l'API get PropagationAttributes.
Les attributs personnalisés sont ajoutés au jeton de
propagation par défaut à l'aide de l'API addPropagationAttribute. Extrayez ces attributs
à l'aide de l'API getPropagationAttributes. Ce jeton suit la demande en aval de façon à
ce que les attributs soient disponibles lorsqu'ils sont requis. Lorsque vous utilisez le
jeton de propagation par défaut pour extraire des attributs, vous devez comprendre les
aspects suivants :
- Le jeton de propagation n'est disponible que sur les serveurs où la propagation et la
sécurité sont activées.
- L'autorisation Java 2 Security javax.security.auth.AuthPermission "wssecurity.getPropagationAttributes" est nécessaire pour extraire les attributs du jeton de propagation par défaut.
Pour ajouter des attributs à l'aide de l'API addPropagationAttributes, voir Ajout
d'attributs personnalisés au jeton de propagation par défaut.
L'exemple de code suivant montre comment utiliser l'API getPropagationAttributes.
// Si la sécurité est désactivée sur ce serveur d'applications, il n'est pas nécessaire
d'effectuer une vérification
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try
{
String key = "maclé";
String[] values = null;
// Définit la clé et la valeur1
values = com.ibm.websphere.security.WSSecurityHelper.
getPropagationAttributes (key);
// Imprime les valeurs
for (int i=0; i<values.length; i++)
{
System.out.println("Value[" + i + "] = " + values[i]);
}
}
catch (Exception e)
{
// Exécute un traitement d'exception normal pour votre application
}
}
Par exemple, la sortie est :
Value[0] = value1
Value[1] = value2
- Modifiez la configuration de fabrique de jetons de propagation pour utiliser une fabrique de jetons
autre que la fabrique de jetons par défaut.
Lorsque WebSphere
Application Server génère un jeton de propagation par
défaut, le serveur d'applications utilise la classe TokenFactory définie à l'aide de la
propriété com.ibm.wsspi.security.token.propagationTokenFactory.
La fabrique de jetons par défaut définie pour cette propriété s'appelle
com.ibm.ws.security.ltpa.AuthzPropTokenFactory.
Cette fabrique de jetons code les données du jeton de propagation sans les chiffrer. Le
jeton de propagation étant généralement transmis via CSIv2 à l'aide de SSL (Secure Sockets Layer), il est inutile de
chiffrer le jeton. Toutefois, si vous souhaitez renforcer la sécurité pour le jeton
de propagation, vous pouvez associer une implémentation différente de fabrique de jetons
à cette propriété pour obtenir le chiffrement. Par exemple, si vous décidez d'associer
la fabrique de jetons com.ibm.ws.security.ltpa.LTPAToken2Factory à cette propriété, le
jeton est chiffré à l'aide de l'algorithme AES. Toutefois, vous devez déterminer si vous souhaitez privilégier les performances ou les besoins en sécurité. L'ajout d'informations confidentielles au jeton de propagation peut justifier le
remplacement de l'implémentation de la fabrique de jetons par une autre implémentation
qui chiffre les données au lieu de les coder.
- Ouvrez la console d'administration.
- Cliquez surSécurité > Sécurité globale.
- Cliquez sur Propriétés personnalisées.
- Effectuez la signature et le chiffrement du jeton de propagation par
défaut.
Si vous souhaitez effectuer votre
propre signature et chiffrement du jeton de propagation par défaut, vous devez
implémenter les classes suivantes :
- com.ibm.wsspi.security.ltpa.Token
- com.ibm.wsspi.security.ltpa.TokenFactory
L'implémentation de votre fabrique de jetons instancie et valide l'implémentation du
jeton. Vous pouvez décider d'utiliser les clés LDAP (Lightweight Third Party
Authentication) et de les transmettre à la méthode d'initialisation de la fabrique de
jetons ou d'utiliser vos propres clés. Si vous utilisez vos propres clés, elles doivent
être identiques partout afin de permettre la validation des jetons générés à l'aide de
ces clés. Pour plus d'informations sur l'implémentation de votre fabrique de jetons
personnalisée, voir la documentation de l'API accessible à l'aide d'un lien de la page
d'accueil du centre de documentation.
- Associez la fabrique de jetons au jeton de propagation par
défaut.
- Ouvrez la console d'administration.
- Cliquez surSécurité > Sécurité globale.
- Cliquez sur Propriétés personnalisées.
- Recherchez la propriété com.ibm.wsspi.security.token.propagationTokenFactory et
vérifiez que la valeur de cette propriété correspond à l'implémentation de votre fabrique
de jetons personnalisée.
- Vérifiez que vos classes d'implémentation sont placées dans le répertoire app_server_root/classes afin que le chargeur de classes de WebSphere
Application Server puisse les charger.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
Vérifiez que vos classes d'implémentation sont placées dans le répertoire
${USER_INSTALL_ROOT}/classes afin que le chargeur de
classes de WebSphere
Application Server puisse les charger.
Vérifiez que le profil d'utilisateur QEJBSVR dispose des droits
d'accès de lecture, d'écriture et d'exécution (*RWX) dans le répertoire des classes.
la
commande WRKAUT (Work with Authority) permet d'afficher les droits d'accès du répertoire.