La sécurité des webservices REST

Ce billet fait suite à celui intitulé "Exemple de webservice rest avec jersey". En fait, la procédure montrée ici est valable pour tous les webservices. Elle n'est pas propre à ceux qui utilisent l'API Jersey.

La première chose à prendre en compte pour la sécurité est d'utiliser HTTPS pour crypter les communications de bout en bout.

Pour utiliser l'authentification, nous allons définir certains aspects sécuritaires dans le web.xml.
<web-app>
   <servlet>
     <servlet-name>RestServlet</servlet-name>
     <servlet-class>
       com.sun.jersey.spi.container.servlet.ServletContainer
     </servlet-class>
   </servlet>
   <servlet-mapping>
     <servlet-name>RestServlet</servlet-name>
     <url-pattern>/*</url-pattern>
   </servlet-mapping>

   <security-constraint>
     <web-resource-collection>
         <web-resource-name> Citation </web-resource-name>
          <url-pattern>/citation/*</url-pattern>
          <http-method>GET</http-method>
       </web-resource-collection>
       <auth-constraint>
            <role-name>USERS</role-name>
       </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>

    <security-role>
       <role-name>USERS</role-name>
    </security-role>
</web-app>
On avons spécifié les contraintes de sécurité, c'est-à-dire quelles pages (ou ressources) doivent être sécurisées. Ceci est fait avec  <url-pattern>/citation/* </url-pattern>
Il y a plusieurs manières de procéder à l'authentification :

  • Basic authenication : une popup demande de s'identifier 
  • Form authenication : on propose une page de login
  • Form authenication avec SSL : une des deux solutions précédentes, mais les informations sont cryptées par le protocole HTTPS.


Dans cet exemple, nous avons utilisé d'authentification basic: <auth-method>BASIC</auth-method>

Il nous reste maintenant à définir un rôle sur le serveur. Avec Tomcat, on le (ou les) spécifie dans le fichier tomcat-users.xml du répertoire [TOMCAT_HOME]/conf.
<tomcat-users>
  <role rolename="users"/>
  <user password="user" roles="users" username="user"/>
   [...]
</tomcat-users>
Pour accéder à la ressource demandée, il faut se logger en tant que "user", password "user".

Dans le cas où l'authentification se fait par l'intermédiaire d'un formulaire de login, voici les quelques modifications à apporter.
Dans le web.xml, il faut modifier la section  <login-config>.
<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/logon.jsp</form-login-page>
  </form-login-config>
</login-config>
Créer un formulaire de login.
<html>
<head>
    <title>Login Page</title>
</head>
<h2>Login</h2>
<br><br>
<form action="j_security_check" method=post>
    <p><strong>Login: </strong>
    <input type="text" name="j_username" size="25">
    <p><p><strong>Password: </strong>
    <input type="password" size="15" name="j_password">
    <p><p>
    <input type="submit" value="Submit">
    <input type="reset" value="Reset">
</form>
</html>
Note: l'action du formulaire doit se nommer j_security_check. De même les champs Login et Password doivent avoir pour Name j_username et j_password.

Aucun commentaire:

Enregistrer un commentaire