Connexion par programmation pour JAAS
Type de connexion par formulaire qui permet aux application de présenter des formulaires de connexion spécifiques aux sites pour l'authentification.
Lorsque les applications client de bean enterprise demandent que l'utilisateur fournisse des informations d'identification, l'éditeur de l'application doit rassembler ces informations et authentifier l'utilisateur. Le travail du programmeur peut être classé en fonction de l'emplacement où s'effectue l'authentification des utilisateurs :
- un programme client,
- un programme serveur.
Les utilisateurs des applications Web sont invités à entrer des données d'authentification de plusieurs manières. L'élément <login-config> dans le fichier du descripteur de déploiement de l'application Web définit le mécanisme permettant de collecter ces informations. Les programmeurs qui préfèrent personnaliser des procédures de connexion plutôt que de dépendre de périphériques génériques, telle une fenêtre de boîte de dialogue 401 dans un navigateur, peuvent utiliser une connexion par formulaire afin de fournir un formulaire propre à une application pour rassembler des informations de connexion.
L'authentification s'effectue uniquement si la sécurité administrative est activée. Si vous voulez utiliser une connexion par formulaire pour les applications Web, vous devez indiquer FORM dans la balise auth-method de l'élément <login-config> dans le descripteur de déploiement de chaque application Web.
Les applications peuvent présenter des formulaires de connexion propres à chaque site en utilisant le type de connexion par formulaire de WebSphere Application Server. La spécification Java™ Platform, Enterprise Edition (Java EE) définit ce type de connexion comme l'une des méthodes d'authentification destinées aux applications Web. WebSphere Application Server fournit un mécanisme de déconnexion par formulaire.
Connexion par programme Java Authentication and Authorization Service
Le service JAAS (Java Authentication and Authorization Service) est une nouvelle fonction de WebSphere Application Server. Elle obéit également à la spécification Java EE 1.4. JAAS est une série d'API d'authentification stratégique qui remplacent les API de connexion par programmation CORBA (Common Object Request Broker Architecture). WebSphere Application Server fournit des extensions pour JAAS :
- Pour une application client ou une application de conteneur client
Java pure,
initialisez la sécurité ORB (Object Request Broker) client avant d'établir une
connexion JAAS. Pour cela, exécutez le code suivant avant d'établir la connexion JAAS :
... import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; ... // Effectuez un InitialContext et une recherche par défaut avant de // vous connecter afin d'initialiser la sécurité ORB et pour que l'hôte et le port // d'amorçage puissent être déterminés pour la recherche du serveur de sécurité. Si vous ne souhaitez pas // valider l'ID utilisateur/le mot de passe lors de la connexion JAAS, désactivez // la propriété com.ibm.CORBA.validateBasicAuth dans le fichier // sas.client.props. Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); env.put(Context.PROVIDER_URL, "corbaloc:iiop:myhost.mycompany.com:2809"); Context initialContext = new InitialContext(env); Object obj = initialContext.lookup("");
Remarque : Définissez com.ibm.CORBA.validateBasicAuth=false à chaque connexion à un serveur z/OS. Cette fonction ne fonctionne pour l'instant pas d'un client réparti vers un serveur z/OS car le serveur de sécurité est recherché à l'aide du principal "UNAUTHENTICATED", qui n'est pas accepté sur les systèmes z/OS.
- Pour l'application client Java pure ou l'application conteneur du client, assurez-vous que le nom d'hôte et le numéro de port sont correctement définis dans les propriétés d'amorce JNDI (Java Naming and Directory Interface) cibles. Pour plus d'informations, voir Développement d'applications utilisant l'interface CosNaming (CORBA Naming).
- Si l'application utilise une configuration de connexion JAAS personnalisée, assurez-vous que cette dernière est correctement définie. Pour plus d'informations, voir Configuration de connexions par programmation pour JAAS (Java Authentication and Authorization Service).
- Certaines API JAAS sont protégées par des droits de sécurité Java 2. Si ces API sont
utilisées par le code de l'application, assurez-vous que ces droits sont ajoutés au
fichier was.policy.
Pour plus de détails, voir les sections Ajout du fichier was.policy aux applications pour la sécurité Java 2, Utilisation de PolicyTool pour éditer des fichiers de règles pour la sécurité Java 2 et
Configuration du fichier was.policy pour la sécurité Java 2.
Pour
connaître les API protégées par les droits de sécurité Java 2, consultez la documentation sur les API publiques d'IBM® Developer Kit
Java
Technology Edition ; JAAS et WebSphere
Application Server. La liste
ci-après contient les interfaces API utilisées dans les exemples de code fournis avec cette
documentation.
- Les constructeurs javax.security.auth.login.LoginContext sont protégés par javax.security.auth.AuthPermission "createLoginContext".
- javax.security.auth.Subject.doAs et com.ibm.websphere.security.auth.WSSubject.doAs sont protégées par javax.security.auth.AuthPermission "doAs"
- javax.security.auth.Subject.doAsPrivileged et com.ibm.websphere.security.auth.WSSubject.doAsPrivileged sont protégées par javax.security.auth.AuthPermission "doAsPrivileged"
- com.ibm.websphere.security.auth.WSSubject : en raison d'une négligence de conception dans JAAS version 1.0, javax.security.auth.Subject.getSubject ne renvoie pas le sujet associé à l'unité d'exécution dans le bloc de code java.security.AccessController.doPrivileged. Cette situation peut entraîner un comportement incohérent et nécessiter des efforts inutiles pour y pallier. L'API com.ibm.websphere.security.auth.WSSubject offre une solution pour associer le sujet à l'unité d'exécution. L'API com.ibm.websphere.security.auth.WSSubject étend le modèle JAAS aux ressources Java EE pour permettre des vérifications d'autorisation. Le sujet associé à l'unité d'exécution dans le bloc de code com.ibm.websphere.security.auth.WSSubject.doAs ou com.ibm.websphere.security.auth.WSSubject.doAsPrivileged est utilisé pour les vérifications d'autorisation des ressources Java EE.
- Prise en charge de la console d'administration pour définir une nouvelle configuration
de connexion JAAS : Vous pouvez définir la configuration de connexion JAAS dans la console
d'administration et la stocker dans l'API de configuration de WebSphere
Application Server. Les applications peuvent définir une nouvelle configuration de connexion JAAS dans la
console d'administration. Les données sont conservées dans le référentiel de
configuration stocké avec l'API de configuration de WebSphere
Application Server. Toutefois, WebSphere
Application Server prend toujours en charge le format de configuration de connexion JAAS
par défaut fourni par l'implémentation JAAS par défaut. Si des configurations de connexion
de duplication sont définies à la fois dans l'API de configuration WebSphere
Application Server et dans le format de fichier texte simple, c'est l'API de
configuration WebSphere
Application Server qui prévaut. Avantages de la définition de la configuration de connexion dans l'API de configuration WebSphere
Application Server :
- Définition de la configuration de connexion JAAS à l'aide de la console d'administration.
- Gestion centralisée de la configuration de connexion JAAS.
- Répartition de la configuration de connexion JAAS dans une installation WebSphere Application Server, Network Deployment.
- Configurations de connexion JAAS pour WebSphere
Application Server : WebSphere
Application Server fournit des configurations de connexion JAAS afin que l'application puisse effectuer
une authentification par programme auprès de l'environnement d'exécution de la sécurité WebSphere
Application Server. Ces configurations de connexion
JAAS pour WebSphere
Application Server effectuent, en fonction des
données entrées, une authentification avec le mécanisme configuré, SWAM (Simple WebSphere Authentication
Mechanism) ou LTPA (Lightweight Third-Party Authentication) et le registre d'utilisateurs
(système d'exploitation local, LDAP ou personnalisé). Le sujet authentifié à partir de
ces configurations de connexion contient le principal et les justificatifs requis pouvant
être utilisés par l'environnement d'exécution de la sécurité WebSphere
Application Server pour effectuer des vérifications d'autorisation auprès de ressources protégées basées sur des rôles
Java EE. Remarque : SWAM est obsolète dans WebSphere Application Server Version 9.0 et sera supprimée dans la prochaine version.Voici les configurations de connexion JAAS fournies par WebSphere Application Server:
- Configuration de connexion WSLogin JAAS : configuration de connexion JAAS générique utilisable notamment par un client Java, une application de conteneur client, un servlet, un fichier JSP, un bean enterprise afin de procéder à une authentification en fonction d'un ID utilisateur et d'un mot de passe ou d'un jeton dans l'environnement d'exécution de sécurité de WebSphere Application Server. Toutefois, cette configuration ne prend pas en charge le gestionnaire CallbackHandler spécifié dans le descripteur de déploiement du conteneur du client.
- Configuration de connexion JAAS pour le conteneur client : cette configuration de connexion JAAS reconnaît le gestionnaire CallbackHandler indiqué dans le descripteur de déploiement du conteneur client. Le module de connexion de cette configuration utilise le gestionnaire CallbackHandler dans le descripteur de déploiement du conteneur client, même si le code de l'application a défini un gestionnaire CallbackHandler dans le contexte de connexion. Cela s'applique aux applications de conteneur client.
- Les sujets authentifiés avec les configurations de connexion JAAS mentionnées précédemment contiennent un principal com.ibm.websphere.security.auth.WSPrincipal et un justificatif com.ibm.websphere.security.auth.WSCredential. Si le sujet authentifié est transmis à la méthode com.ibm.websphere.security.auth.WSSubject.doAs ou aux autres méthodes doAs, l'environnement d'exécution de sécurité WebSphere Application Server peut effectuer des vérifications d'autorisation sur les ressources Java EE en fonction du justificatif com.ibm.websphere.security.auth.WSCredential du sujet.
- Configurations de connexion JAAS définies par le client : vous pouvez définir d'autres configurations de connexion JAAS. Pour plus de détails, voir Configuration de connexions par programmation pour JAAS (Java Authentication and Authorization Service). Utilisez ces configurations pour une authentification par programmation dans le mécanisme d'authentification personnalisé. Toutefois, les sujets issus des configurations de connexion JAAS définies par le client ne pourront peut-être pas être utilisés par l'environnement d'exécution de la sécurité de WebSphere Application Server pour effectuer des vérifications d'autorisations s'ils ne comportent pas le principal et les justificatifs requis.
Recherche de l'exception de connexion de cause racine d'une connexion JAAS
Si vous recevez une exception LoginException après avoir émis l'API LoginContext.login API, vous pouvez déterminer l'exception de cause racine à partir du registre d'utilisateurs configuré. Dans les modules de connexion, les exceptions de registre sont encapsulées par une classe com.ibm.websphere.security.auth.WSLoginFailedException. Cette exception a une méthode getCause qui permet d'extraire l'exception qui a été encapsulée après l'émission de la commande précédente.
Il n'est pas toujours garanti que vous obteniez une exception WSLoginFailedException, mais la plupart des exceptions générées par le registre d'utilisateurs sont affichées ici. L'exemple suivant illustre une API LoginContext.login avec le bloc catch associé. Transtypez l'exception WSLoginFailedException en classe com.ibm.websphere.security.auth.WSLoginFailedException si vous souhaitez émettre l'API getCause.
try
{
lc.login();
}
catch (LoginException le)
{
// explorer en aval les exceptions car il se peut qu'elles se propagent dans la phase d'exécution
Throwable root_exception = determineCause(le);
// vous pouvez maintenant utiliser "root_exception" pour comparer à un type d'exception particulier
// par exemple, si vous avez mis en oeuvre un type CustomUserRegistry, vous
// sauriez que rechercher ici.
}
/* Méthode employée pour explorer en aval de WSLoginFailedException afin de recherche l'exception de "cause racine" */
public Throwable determineCause(Throwable e)
{
Throwable root_exception = e, temp_exception = null;
// continuer en boucle jusqu'à ce qu'il n'y ait plus d'exceptions
// WSSecurityException
while (true)
{
if (e instanceof com.ibm.websphere.security.auth.WSLoginFailedException)
{
temp_exception = ((com.ibm.websphere.security.auth.WSLoginFailedException) e).getCause();
}
else if (e instanceof com.ibm.websphere.security.WSSecurityException)
{
temp_exception = ((com.ibm.websphere.security.WSSecurityException) e).getCause();
}
else if (e instanceof javax.naming.NamingException)
// rechercher l'exception imbriquée Ldap
{
temp_exception = ((javax.naming.NamingException)e).getRootCause();
}
else if (e instanceof your_custom_exception_here)
{
// votre traitement personnalisé ici, si nécessaire
}
else
{
// cette exception n'est pas des types que nous recherchons,
// revenons en arrière, ceci est la racine de la perspective
// WebSphere Application Server
return root_exception;
}
if (temp_exception != null)
{
// nous avons une exception ; revenons en arrière pour voir s'il y en a une
// autre imbriquée dedans.
root_exception = temp_exception;
e = temp_exception;
continue;
}
else
{
// nous avons enfin l'exception racine de ce chemin d'appel, ce qui
// doit se produire à un certain stade
return root_exception;
}
}
}
Recherche de l'exception de connexion de cause racine d'un filtre de servlet
Throwable t = com.ibm.websphere.security.auth.WSSubject.getRootLoginException();
if (t != null)
t = determineCause(t);
Si vous obtenez l'exception, vous pouvez la soumettre à l'exemple determineCause précédent afin d'obtenir la cause racine de registre natif.
Activation de la propagation des exceptions de connexion de cause racine aux clients Java purs
Actuellement, pour des raisons de sécurité, la cause racine n'est pas propagée à un client pur. Toutefois, en environnement sécurisé, il n'est pas exclu de la propager à un client pur. Si vous souhaitez activer la propagation des exceptions de cause racine à un client pur, cliquez sur WebSphere Application Server puis définissez la propriété suivante :
dans la console d'administrationcom.ibm.websphere.security.registry.propagateExceptionsToClient=true
Connexion par programmation sans fenêtre
javax.security.auth.login.LoginContext lc = null;
try {
lc = new javax.security.auth.login.LoginContext("WSLogin",
new com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl("user", "securityrealm", "securedpassword"));
// Création d'un contexte de connexion et définition de l'implémentation CallbackHandler
// L'implémentation CallbackHandler détermine le mode de collecte des
données d'authentification
// dans ce cas, les données d'authentification sont passées au mécanisme d'authentification
// implémenté par le module de connexion.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec d'instanciation d'un contexte de connexion et
exception : "
+ e.getMessage());
e.printStackTrace();
// javax.security.auth.AuthPermission "createLoginContext" n'est peut-être pas attribué
// à l'application ou la configuration de connexion JAAS n'est pas définie.
}
if (lc != null)
try {
lc.login(); // établir une connexion
javax.security.auth.Subject s = lc.getSubject();
// obtenir le sujet authentifié.
// Appeler une ressource Java EE à l'aide du sujet authentifié
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
try {
bankAccount.deposit(100.00); // où bankAccount est un EJB protégé
} catch (Exception e) {
System.out.println("ERREUR : erreur lors de l'accès à la ressource EJB, exception : "
+ e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec de connexion avec l'exception: " +
e.getMessage());
e.printStackTrace();
// échec de connexion, logique de connexion
éventuellement conseillée.
}
Le gestionnaire de rappel com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl peut être utilisé avec un client pur Java, un conteneur d'applications client, un bean enterprise, des fichiers JSP (JavaServer Pages), un servlet, ou tout autre ressource Java 2 Platform, Enterprise Edition (Java EE).
Connexion par programmation avec affichage d'une fenêtre de l'interface utilisateur
![[z/OS]](../images/ngzos.gif)
![[AIX HP-UX Solaris]](../images/unix.gif)
javax.security.auth.login.LoginContext lc = null;
try {
lc = new javax.security.auth.login.LoginContext("WSLogin",
new com.ibm.websphere.security.auth.callback.WSGUICallbackHandlerImpl());
// Création d'un contexte de connexion et définition de l'implémentation CallbackHandler
// L'implémentation CallbackHandler détermine le mode de collecte des
données d'authentification
// Dans ce cas, les données d'authentification sont rassemblées à l'aide d'une invite de connexion de l'interface graphique
// et transmises au mécanisme d'authentification implémenté par le
module de connexion.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec d'instanciation d'un contexte de connexion et
exception : "
+ e.getMessage());
e.printStackTrace();
// javax.security.auth.AuthPermission "createLoginContext" n'est peut-être pas attribué
// à l'application ou la configuration de connexion JAAS n'est pas définie.
}
if (lc != null)
try {
lc.login(); // établir une connexion
javax.security.auth.Subject s = lc.getSubject();
// obtenir le sujet authentifié.
// Appel de ressources Java EE à l'aide du sujet authentifié
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
try {
bankAccount.deposit(100.00); // où bankAccount est un bean enterprise protégé
} catch (Exception e) {
System.out.println("ERREUR : erreur lors de l'accès à la ressource EJB, exception : "
+ e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec de connexion avec l'exception: " +
e.getMessage());
e.printStackTrace();
// échec de connexion, logique de connexion
éventuellement conseillée.
}
WebSphere Application Server fournit également une implémentation d'antémémoire de justificatif Kerberos de l'interface javax.security.auth.callback.CallbackHandler. Le gestionnaire de rappel, com.ibm.websphere.security.auth.callback.WSCcacheCallBackHandlerImpl. Cette interface permet à une application de transmettre les données d'authentification au module de connexion WebSphere Application Server pour effectuer l'authentification.
Cette fonction permet uniquement au code de l'application côté client d'authentifier auprès de WebSphere Application Server avec l'antémémoire de justificatif Kerberos.
useDefaultKeytab=false
useDefaultCcache=false
tryFirstPass=false
useFirstPass=false
forwardable=false
renewable=false
renewable=false
noaddress=false
javax.security.auth.login.LoginContext lc = null;
String krb5Ccache = /etc/krb5/krb5cc_utle;
try {
lc = new javax.security.auth.login.LoginContext("WSKRB5Login",
new com.ibm.websphere.security.auth.callback.WSCcacheCallBackHandlerImpl(user, krb5Realm, krb5Ccache, false));
// Création d'un contexte de connexion et définition de l'implémentation CallbackHandler
// L'implémentation CallbackHandler détermine le mode de collecte des données d'authentification
// dans ce cas, les données d'authentification sont rassemblées via une fenêtre stdin
// et transmises au mécanisme d'authentification implémenté par le module de connexion.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec d'instanciation d'un contexte de connexion et exception :
" + e.getMessage());
e.printStackTrace();
// javax.security.auth.AuthPermission "createLoginContext" n'est peut-être pas attribué
// à l'application ou la configuration de connexion JAAS n'est pas définie.
}
if (lc != null)
try {
lc.login(); // établir une connexion
javax.security.auth.Subject s = lc.getSubject();
// obtenir le sujet authentifié.
// Appeler une ressource Java EE à l'aide du sujet authentifié
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
try {
bankAccount.deposit(100.00); // où bankAccount est un bean enterprise protégé
} catch (Exception e) {
System.out.println("ERREUR : erreur lors de l'accès à la ressource EJB, exception : "
+ e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec de connexion avec l'exception: " +
e.getMessage());
e.printStackTrace();
// échec de connexion, logique de connexion
éventuellement conseillée.
}
Application Server avec l'antémémoire de justificatif Kerberos par défaut.
javax.security.auth.login.LoginContext lc = null;
try {
lc = new javax.security.auth.login.LoginContext("WSKRB5Login",
new com.ibm.websphere.security.auth.callback.WSCcacheCallBackHandlerImpl(user, krb5Realm, null, true));
// Création d'un contexte de connexion et définition de l'implémentation CallbackHandler
// L'implémentation CallbackHandler détermine le mode de collecte des données d'authentification
// dans ce cas, les données d'authentification sont rassemblées via une fenêtre stdin
// et transmises au mécanisme d'authentification implémenté par le module de connexion.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec d'instanciation d'un contexte de connexion et exception :
" + e.getMessage());
e.printStackTrace();
// javax.security.auth.AuthPermission "createLoginContext" n'est peut-être pas attribué
// à l'application ou la configuration de connexion JAAS n'est pas définie.
}
if (lc != null)
try {
lc.login(); // établir une connexion
javax.security.auth.Subject s = lc.getSubject();
// obtenir le sujet authentifié.
// Appeler une ressource Java EE à l'aide du sujet authentifié
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
try {
bankAccount.deposit(100.00); // où bankAccount est un bean enterprise protégé
} catch (Exception e) {
System.out.println("ERREUR : erreur lors de l'accès à la ressource EJB, exception : "
+ e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec de connexion avec l'exception: " +
e.getMessage());
e.printStackTrace();
// échec de connexion, logique de connexion
éventuellement conseillée.
}
Application Server avec l'antémémoire de justificatif Kerberos native Microsoft. Le client doit
se connecter au contrôleur de domaine.
javax.security.auth.login.LoginContext lc = null;
try {
lc = new javax.security.auth.login.LoginContext("WSKRB5Login",
new com.ibm.websphere.security.auth.callback.WSCcacheCallBackHandlerImpl(null, null, null, true));
// Création d'un contexte de connexion et définition de l'implémentation CallbackHandler
// L'implémentation CallbackHandler détermine le mode de collecte des données d'authentification
// dans ce cas, les données d'authentification sont rassemblées via une fenêtre stdin
// et transmises au mécanisme d'authentification implémenté par le module de connexion.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec d'instanciation d'un contexte de connexion et exception :
" + e.getMessage());
e.printStackTrace();
// javax.security.auth.AuthPermission "createLoginContext" n'est peut-être pas attribué
// à l'application ou la configuration de connexion JAAS n'est pas définie.
}
if (lc != null)
try {
lc.login(); // établir une connexion
javax.security.auth.Subject s = lc.getSubject();
// obtenir le sujet authentifié.
// Appeler une ressource Java EE à l'aide du sujet authentifié
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
try {
bankAccount.deposit(100.00); // où bankAccount est un bean enterprise protégé
} catch (Exception e) {
System.out.println("ERREUR : erreur lors de l'accès à la ressource EJB, exception : "
+ e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec de connexion avec l'exception: " +
e.getMessage());
e.printStackTrace();
// échec de connexion, logique de connexion
éventuellement conseillée.
}
module WSKRB5Login
La configuration de connexion JAAS WSKRB5Login : configuration de connexion JAAS générique utilisable notamment par un client Java, un conteneur client, un servlet, un fichier JSP ou un bean enterprise afin de procéder à une authentification en fonction du mot de passe du nom du principal Kerberos ou d'une antémémoire de justificatif Kerberos dans l'environnement d'exécution de sécurité de WebSphere Application Server security runtime. Toutefois, cette configuration ne prend pas en charge le gestionnaire CallbackHandler spécifié dans le descripteur de déploiement du conteneur du client.
Placez les fichiers krb5.ini ou krb5.conf que vous avez créés dans un emplacement par défaut. Si l'un des fichiers n'est pas situé dans l'emplacement par défaut, vous devez définir un chemin d'accès correct et un nom de fichier de configuration Kerberos pour la propriété système JVM java.security.krb5.conf.
Sur une plateforme Windows, l'emplacement par défaut est c:\winnt\krb5.ini.
Sur une plateforme Linux® l'emplacement par défaut est /etc/krb5.conf.
Sur les autres plateformes Unix, l'emplacement par défaut est /etc/krb5/krb5.conf.
Sur une plateforme z/OS, l'emplacement par défaut est /etc/krb5/krb5.conf.
Les paramètres de configuration Kerberos, le nom du centre de distribution de clés Kerberos (KDC) et les paramètres de domaine sont fournis dans le fichier de configuration Kerberos ou via les fichiers de propriété système java.security.krb5.kdc et java.security.krb5.realm.
Connexion par programmation avec affichage d'une fenêtre stdin
javax.security.auth.login.LoginContext lc = null;
try {
lc = new javax.security.auth.login.LoginContext("WSLogin",
new com.ibm.websphere.security.auth.callback.WSStdinCallbackHandlerImpl());
// Création d'un contexte de connexion et définition de l'implémentation CallbackHandler
// L'implémentation CallbackHandler détermine le mode de collecte des données d'authentification
// dans ce cas, les données d'authentification sont rassemblées via une fenêtre stdin
// et transmises au mécanisme d'authentification implémenté par le module de connexion.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec d'instanciation d'un contexte de connexion et exception :
" + e.getMessage());
e.printStackTrace();
// javax.security.auth.AuthPermission "createLoginContext" n'est peut-être pas attribué
// à l'application ou la configuration de connexion JAAS n'est pas définie.
}
if (lc != null)
try {
lc.login(); // établir une connexion
javax.security.auth.Subject s = lc.getSubject();
// obtenir le sujet authentifié.
// Appeler une ressource Java EE à l'aide du sujet authentifié
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
try {
bankAccount.deposit(100.00); // où bankAccount est un bean enterprise protégé
} catch (Exception e) {
System.out.println("ERREUR : erreur lors de l'accès à la ressource EJB, exception : "
+ e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERREUR : échec de connexion avec l'exception: " +
e.getMessage());
e.printStackTrace();
// échec de connexion, logique de connexion
éventuellement conseillée.
}