Manuel §8.7    

Authentification

SWS permet d'obtenir une identification d'un client au moyen de la fonction GetHttpAuth.

Le fonctionnement repose sur le mécanisme d'authentification d'http:

  1. Lorsqu'un client demande une page qui est protégée par une authentification, SWS répond par une réponse 401 dans l'entête de laquelle se trouve un champ WWW-Authenticate (cf.Header());
  2. Le navigateur interroge alors l'utilisateur pour lui demander son nom et son mot de passe, il reprend alors sa demande de page initiale en incorporant un champ "Authorization" qui contient de manière codée le nom et le mot de passe de l'utilisateur.
  3. Si SWS estime que l'utilisateur ainsi identifié est apte à consulter la page, il la transmet normalement; s'il estime que non, il renvoit une réponse 401.

Pour cela on dispose de deux fonctions, la fonction Header qui permet d'inclure dans l'entête d'une réponse un champ quelconque et donc un champ "WWW-Authenticate" et la fonction GetHttpAuth qui permet de récupérer le nom et le mot de passe de l'utilisateur lors de l'analyse d'une page.

GetHttpAuth( { &User {, &Password {, &Type}}}) -> Status

La fonction retourne optionnellement le nom de l'utilisateur, son mot de passe et le type d'authentification obtenue ( c'est généralement "Basic").

Le statut rend indéfini si un des paramètres n'est pas une variable affectable, et sinon 1 si la demande comprend un champ "Authentification" et 0 sinon.

Voici un exemple de code Sisal montrant un usage typique de l'authentification qui permet de limiter l'accés à une page; il est à noter que le mot de passe ne sera plus demandé pour d'autres pages qui nécessiterait la même authentification.

<?sisal
Var User; Password;
begin
   if GetHttpAuth( user, password) == 1 begin
      echo( "Bienvenue ":User:"<p/>");
      echo( "Ton mot de passe est ":password:".<p/>");
   end else begin
      Header("WWW-Authenticate: Basic realm="MaMachine"");
      echo( "Texte à envoyer si le client appuie sur  le bouton d'annulationn");
      return 401;
   end
end.
?>