10.2.7. Contraintes de sécurité de contenu web

Dans une application web, la sécurité se définit par les rôles qui ont accès au contenu par un modèle d'url qui identifie le contenu protégé. Ce groupe d'informations est déclaré par l'élément web.xml security-constraint.
Illustration of Web Content Security Constraints

Figure 10.5. Contraintes de sécurité de contenu web

Le contenu à sécuriser est déclaré à l'aide d'un ou plusieurs éléments <web-resource-collection>. Chaque élément <web-resource-collection> contient une série facultative d'éléments <url-pattern> suivie d'une série facultative d'éléments <http-method>. La valeur de l'élément <url-pattern > spécifie un URL qui doit correspondre à un URL de requête pour que la demande corresponde à une tentative d'accès au contenu sécurisé. La valeur de l'élément <http-method> spécifie un type de requête HTTP à autoriser.
L'élément optionnel <user-data-constraint> spécifie les exigences de la couche de transport du client pour la connexion au serveur. L'exigence peut être pour l'intégrité du contenu (empêchant la falsification dans le processus de communication de données) ou de la confidentialité (empêchant la lecture en transit). L'élément <transport-guarantee> indique le degré de protection de la communication entre le client et le serveur. Ses valeurs sont NONE, INTEGRAL, et CONFIDENTIAL. Une valeur NONE signifie que l'application n'a pas besoin de garantie de transport. Une valeur INTEGRAL signifie que l'application requiert que les données envoyées entre le client et le serveur soient envoyées de telle sorte qu'elles ne puissent pas être modifiées en transit. Une valeur CONFIDENTIAL signifie que l'application requiert que les données soient transmises d'une manière qui empêche les autres entités d'observer le contenu de la transmission. Dans la plupart des cas, la présence de INTEGRAL ou CONFIDENTIAL indique qu'il faut utiliser SSL.
L'élément optionnel <login-config> est utilisé pour configurer la méthode d'authentification qui doit être utilisée, le nom de domaine qui doit être utilisé pour l'application et les attributs qui sont nécessaires pour le mécanisme de connexion du formulaire.
Illustration of Web Login Configuration

Figure 10.6. Configuration de connexion web

L'élément enfant <auth-method> spécifie le mécanisme d'authentification de l'application web. Comme condition préalable, l'accès à toutes les ressources web qui sont protégées par une contrainte de permission, un utilisateur doit avoir authentifié par le biais du mécanisme configuré. Les valeurs <auth-method> légales sont BASIC, DIGEST, FORM, SPNEGO, et CLIENT-CERT. L'élément enfant <realm-name> spécifie le nom de domaine à utiliser en HTTP de base et l'autorisation digest. L'élément enfant <form-login-config> spécifie le log in et les pages d'erreur devant être utilisées pour le log in basé-formulaire. Si la valeur <auth-method> n'est pas FORM, alors form-login-config et ses éléments enfants seront ignorés.
L'exemple de configuration suivant indique que n'importe quel URL se trouvant sous le chemin d'accès /restriction de l'application web requiert un rôle AuthorizedUser. Il n'y a aucune garantie de transport nécessaire et la méthode d'authentification utilisée pour obtenir l'identité de l'utilisateur est l'authentification HTTP BASIC.

Exemple 10.6. Fragment de descripteur web.xml

<web-app>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Secure Content</web-resource-name>
            <url-pattern>/restricted/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>AuthorizedUser</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
    <!-- ... -->
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>The Restricted Zone</realm-name>
    </login-config>
    <!-- ... -->
    <security-role>
        <description>The role required to access restricted content </description>
        <role-name>AuthorizedUser</role-name>
    </security-role>
</web-app>