2009-02-27 10 views
4

J'ai déjà créé un fichier de base de données utilisateur en utilisant la commande htpasswd d'Apache. Ce fichier est maintenant utilisé par plusieurs autres applications comme Apache et Subversion.Comment utiliser la protection htpasswd dans Tomcat?

Les utilisateurs sont créés dans comme ceci:

htpasswd /path/to/users.htpasswd peter 

Ce fichier utilisateur est global, et non par répertoire. Comment puis-je faire Tomcat 6 utiliser ce même fichier comme un domaine de sécurité?

Répondre

1

Il y a deux options:

  1. Utiliser Apache comme avant vers l'tomcat (en utilisant mod_jk ou mod_proxy_ajp) et l'Apache font l'authentification. Vous pouvez trouver des détails sur la façon de le faire here

  2. Si vous voulez que le tomcat fasse l'authentification, alors vous devez utiliser autre chose que le fichier htpasswd. Il existe 4 façons de sauvegarder les informations d'identification des utilisateurs: en utilisant la base de données, JNDI/LDAP, un fichier XML ou un fournisseur JAAS. Vous pouvez lire toutes les options dans le Realm Configuration HOW-TO.

2

Le plus similaire au htpasswd peut être le MemoryRealm. Je me a eu des problèmes pour trouver un exemple simple comment l'utiliser, donc je posterai un exemple de code facile ici:

  1. Mettre en place un rôle, nom d'utilisateur et mot de passe dans tomcat-users.xml

  2. votre web.xml doit contenir quelque chose comme:

    <security-constraint> 
        <web-resource-collection> 
         <web-resource-name> 
         My Protected WebSite 
         </web-resource-name> 
         <url-pattern> /* </url-pattern> 
         <http-method> GET </http-method> 
         <http-method> POST </http-method> 
        </web-resource-collection> 
        <auth-constraint> 
        <!-- the same like in your tomcat-users.conf file --> 
         <role-name> test </role-name> 
        </auth-constraint> 
        </security-constraint> 
        <login-config> 
        <auth-method> BASIC </auth-method> 
        <realm-name> Basic Authentication </realm-name> 
        </login-config> 
        <security-role> 
        <description> Test role </description> 
        <role-name> test </role-name> 
        </security-role> 
    
  3. Ajoutez ceci à votre fichier server.xml:

    <Realm className="org.apache.catalina.realm.MemoryRealm"></Realm> 
    
2

Pour sécuriser l'accès à votre application Web Tomcat, vous pouvez implémenter votre contrainte de sécurité simple (par ex. en /var/lib/tomcat7/webapps/*/WEB-INF/web.xml) comme ci-dessous (ajoutez juste avant la fin </web-app>):

<!-- This security constraint protects your webapp interface. --> 
<login-config> 
    <!-- Define the Login Configuration --> 
    <auth-method>BASIC</auth-method> 
    <realm-name>Webapp</realm-name> 
</login-config> 
<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>Admin</web-resource-name> 
    <url-pattern>/*</url-pattern> 
    <http-method>GET</http-method> 
    <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>*</role-name> 
    </auth-constraint> 
    <!-- Specifying a Secure Connection --> 
    <user-data-constraint> 
    <!-- transport-guarantee can be CONFIDENTIAL (forced SSL), INTEGRAL, or NONE --> 
    <transport-guarantee>NONE</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
<!-- Authorization, see: tomcat-users.xml --> 
<security-role> 
    <role-name>*</role-name> 
</security-role> 

L'élément login-config contient l'élément auth-method, qui spécifie la méthode d'authentification que nous utilisons, qui est BASIC. L'élément security-constraint contient 3 éléments: web-resource-collection, auth-constraint et user-data-constraint. La collection de ressources Web spécifie les parties de notre application qui nécessitent une authentification. Le /* indique que l'ensemble de l'application nécessite une authentification. La contrainte d'authentification spécifie le rôle qu'un utilisateur doit avoir pour accéder aux ressources protégées. La garantie de transport de la contrainte de données utilisateur peut être NONE, CONFIDENTIAL ou INTEGRAL. Nous l'avons défini sur NONE, ce qui signifie que la redirection vers SSL n'est pas requise lorsque vous essayez d'atteindre la ressource protégée.

Assurez-vous également que vous avez la ligne:

<Realm className="org.apache.catalina.realm.MemoryRealm" /> 

dans votre conf/server.xml (section Engine). Si vous n'avez modifié aucun fichier de configuration, examinez le fichier conf/tomcat-users.xml dans votre installation (locate tomcat-users.xml). Ce fichier doit contenir les informations d'identification pour vous permettre d'utiliser Tomcat webapp.

Par exemple, pour ajouter le rôle de gestionnaire IUG à un utilisateur nommé tomcat avec un mot de passe s3cret, ajoutez ce qui suit dans le fichier de configuration ci-dessus:

<role rolename="manager-gui"/> 
<user username="tomcat" password="s3cret" roles="manager-gui"/> 

Ensuite, vous pouvez accéder à votre gestionnaire de webapps de /manager/html (par exemple, rechargement après modification de la configuration).

En savoir plus: Manager App HOW-TO.

Puis redémarrez votre Tomcat et lors de l'accès à votre webapp, il devrait vous demander les bonnes informations d'identification.

Voir aussi:

Questions connexes