Développement à l'aide des API de sécurité par programmation pour les applications Web

Ces informations permettent de sécuriser par programmation les API pour les applications Web.

Avant de commencer

La sécurité par programmation est utilisée par les applications sensibles à la sécurité lorsque la sécurité déclarative seule ne suffit pas à définir le modèle de sécurité de l'application.

Les méthodes de sécurité de servlet authenticate, login, logout, getRemoteUser, isUserInRole et getAuthType sont des méthodes de l'interface javax.servlet.http.HttpServletRequest. Pour des informations détaillées sur ces méthodes de sécurité de servlet, lisez l'article relatif aux méthodes de sécurité de servlet.
Remarque :

Les API logout, login et authenticate sont nouvelles pour Java™ Servlet 3.0 dans cette édition de WebSphere Application Server.

Vous pouvez configurer plusieurs options d'authentification Web qui déterminent la façon dont le client Web interagit avec les URI (Uniform Resource Identifiers) protégés et non protégés. Vous pouvez également indiquer si WebSphere Application Server demande au client Web de fournir des informations d'authentification de base si l'authentification de certificat pour le client HTTPS échoue. Pour plus d'informations, lisez l'article relatif à la sélection d'un mécanisme d'authentification.

[z/OS]Vous pouvez activer un module de connexion de manière à indiquer la classe principale renvoyée par ces appels. Pour plu d'informations, voir la rubrique relative au mappage d'un principal de registre à un ID utilisateur de System Authorization Facility à l'aide du module de connexion de Java Authentication and Authorization Services.

Si vous utilisez la méthode isUserInRole, déclarez un élément security-role-ref dans le descripteur de déploiement avec un sous-élément role-name contenant le nom du rôle transmis à cette méthode ou utilisez l'annotation @DeclareRoles. Les rôles réels étant créés au cours de la phase d'assemblage de l'application, vous pouvez utiliser un rôle logique en tant que nom du rôle et fournir suffisamment de conseils à l'assembleur dans la description de l'élément security-role-ref pour lier ce rôle au rôle réel. Au cours de l'assemblage, l'assembleur crée un sous-élément role-link pour lier le nom du rôle au rôle réel. La création d'un élément security-role-ref est possible si un outil d'assemblage tel que Rational Application Developer est utilisé. Vous pouvez également créer l'élément security-role-ref lors de la phase d'assemblage à l'aide d'un outil d'assemblage.

Procédure

  1. Ajoutez les méthodes de sécurité requises dans le code du servlet.
  2. Créez un élément security-role-ref à l'aide de la zone role-name. Si aucun élément security-role-ref n'est créé au cours du développement, vérifiez s'il est créé au cours de la phase d'assemblage.

Résultats

Une application servlet sécurisée par programme.

Exemple

Ces étapes sont obligatoires pour sécuriser une application à l'aide d'un programme. Cette action est particulièrement utile lorsqu'une application Web doit accéder à des ressources externes et contrôler l'accès à l'aide de son tableau d'autorisation (mappage entre ressources externes et utilisateurs éloignés). Dans ce cas, utilisez la méthode getUserPrincipal ou getRemoteUser pour obtenir l'utilisateur distant ; l'application peut alors consulter sa propre table d'autorisations pour accorder les autorisations. Les informations sur l'utilisateur distant permettent également d'extraire des informations sur les utilisateurs correspondants à partir d'une source externe, telle qu'une base de base de données ou un bean enterprise. Vous pouvez utiliser la méthode isUserInRole d'une manière similaire.
Après le développement, vous pouvez créer un élément security-role-ref :
<security-role-ref>
   <description>Provide hints to assembler for linking this role 
                name to an actual role here<\description>
   <role-name>Mgr<\role-name>
</security-role-ref>
Lors de son exécution, l'assembleur crée un élément role-link :
<security-role-ref>
   <description>Hints provided by developer to map the role 
                name to the role-link</description>
   <role-name>Mgr</role-name>
   <role-link>Manager</role-link>
</security-role-ref>
Vous pouvez ajouter des méthodes de sécurité du servlet par programmation dans n'importe quelle méthode du servlet : doGet, doPost, doPut et doDelete. L'exemple suivant décrit l'utilisation d'une API de sécurité par programmation :
public void doGet(HttpServletRequest request, 
HttpServletResponse response) {

   ....
   // to logoff the current user
	 request.logout();
    
   // to login with a new user
   request.login(“bob”,”bobpwd”)

   // to get remote user using getUserPrincipal()
   java.security.Principal principal = request.getUserPrincipal();
   String remoteUser = principal.getName();
 
   // to get remote user using getRemoteUser()
   remoteUser = request.getRemoteUser();

   // to check if remote user is granted Mgr role
   boolean isMgr = request.isUserInRole("Mgr");

   // use this information in any way as needed by 
   // the application 
   ....
                  
}
Vous pouvez vous connecter à l'aide d'un programme avec un ID utilisateur et un mot de passe dans n'importe quelle méthode de service doGet, doPost, doPut et doDelete de servlet. L'exemple suivant illustre l'utilisation d'une API de connexion/déconnexion par programmation :
public void doGet(HttpServletRequest request, 
HttpServletResponse response) {

   ....
   // to logout the current user. If you are not already authenticate, then no need to call the logout() method.
   request.logout();
    
   // to login with a new user
   request.login(“utle”,”mypwd”)

   // the user utle subject now set on the thread and the LTPA SSO cookie is set in the response
   ....
                  
}
Vous pouvez vous authentifier par programmation avec une identité différente dans n'importe quelle méthode de service doGet, doPost, doPut et doDelete de servlet. Dans cet exemple, si le servlet Web est configuré en vue de l'utilisation de basicAuth, le serveur Web renvoie un code de réponse 401, l'invite de connexion s'affiche et vous pouvez entrer l'ID utilisateur et le mot de passe pour vous authentifier. L'exemple suivant illustre l'utilisation d'une API de connexion/déconnexion par programmation :
public void doGet(HttpServletRequest request, 
HttpServletResponse response) {

   ....
   // to logout the current user. If you are not already authenticate, then no need to call the logout() method.
    
   // to login with a new user
   request.authenticate(response);

   // the new user subject now set on the thread and the LTPA SSO cookie is set in the response
   ....
                  
}
Lors du développement de modules Servlet 3.0, vous pouvez définir la valeur de l'argument rolename dans la méthode isCallerInRole à l'aide d'annotations Java au lieu de déclarer un élément security-role-ref dans le descripteur de déploiement.
@javax.annotation.security.DeclareRoles("Mgr")
public void doGet(HttpServletRequest request, 
HttpServletResponse response) {

   ....

   // to get remote user using getUserPrincipal()
   java.security.Principal principal = request.getUserPrincipal();
   String remoteUser = principal.getName();
 
   // to get remote user using getRemoteUser()
   remoteUser = request.getRemoteUser();

   // to check if remote user is granted Mgr role
   boolean isMgr = request.isUserInRole("Mgr");

   // use this information in any way as needed by 
   // the application 
   ....
                  
}

L'exemple suivant décrit une application Web ou un servlet utilisant le modèle de sécurité par programmation.

Cet exemple de modèle de sécurité par programmation n'est qu'un exemple parmi d'autres. L'application peut utiliser les informations renvoyées par les méthodes getUserPrincipal, isUserInRole et getRemoteUser de toute autre manière qui lui soit significative. Utilisez le modèle de sécurité déclarative lorsque cela est possible.

Fichier : HelloServlet.java

public class HelloServlet extends javax.servlet.http.HttpServlet {

	public void doPost(
		javax.servlet.http.HttpServletRequest request,
		javax.servlet.http.HttpServletResponse response)
		throws javax.servlet.ServletException, java.io.IOException {
	}
public void doGet(
		javax.servlet.http.HttpServletRequest request,
		javax.servlet.http.HttpServletResponse response)
		throws javax.servlet.ServletException, java.io.IOException {
			
        String s = "Hello";
  	
        	
        // get remote user using getUserPrincipal()
        java.security.Principal principal = request.getUserPrincipal();
        String remoteUserName = "";
        if( principal != null )
         	remoteUserName = principal.getName();
// get remote user using getRemoteUser()
        String remoteUser = request.getRemoteUser();

        // check if remote user is granted Mgr role
        boolean isMgr = request.isUserInRole("Mgr");

        // display Hello username for managers and bob. 
        if ( isMgr || remoteUserName.equals("bob") )
            s = "Hello " + remoteUserName;

		 String message =  "<html> \n" +
            		"<head><title>Hello Servlet</title></head>\n" +
      			"<body> /n +"
				"<h1> "  +s+ </h1>/n " + 
		byte[] bytes = message.getBytes();
		
		// displays "Hello" for ordinary users 
        // and displays "Hello username" for managers and "bob".
        response.getOutputStream().write(bytes);
	}

}
Une fois que vous avez développé le servlet, vous pouvez créer une référence de rôle de sécurité pour le servlet HelloServlet comme illustré dans l'exemple suivant :
<security-role-ref>
     <description> </description>
     <role-name>Mgr</role-name>
</security-role-ref>

Que faire ensuite

Après avoir développé une application, utilisez un outil d'assemblage pour créer des rôles et lier les rôles réels à des noms de rôle dans les éléments security-role-ref. Voir les informations relatives à la sécurisation des applications Web en utilisant un outil d'assemblage.

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_web
Nom du fichier : tsec_web.html