# Authentification basique HTTP

## Présentation

Pour l'instant, cette fonctionnalité n'est offerte qu'avec le handler Apache.

Extrait de l'article Wikipedia:

> Dans le contexte d'une transaction HTTP, l'authentification basique est une méthode qui permet au navigateur ou un autre programme client de fournir des éléments d'authentification – sous la forme d'un nom et d'un mot de passe – à chaque requête.

> Avant la transmission, le nom et le mot de passe sont encodés en base-64. Par exemple, le nom Aladdin et le mot-de-passe "open sesame" vont être assemblés en "Aladdin:open sesame" – dont l'équivalent est QWxhZGRpbjpvcGVuIHNlc2FtZQ== en Base64. Un petit effort est requis pour décoder ces chaînes et de nombreux outils de sécurité les décodent à la volée.

So HTTP Basic Authentication is managed trough an HTTP header (`Authorization`), that can be forged by LL::NG, with this precautions:

- Les données ne doivent pas contenir de caractères spéciaux, car le protocole HTTP n'autorise que les caractères ASCII dans les en-têtes (mais suivant le serveur HTTP, vous pouvez utiliser des valeurs encodées ISO)
- Il est nécessaire d'exporter le mot-de-passe, qui peut être le mot-de-passe principal de l'utilisateur (si le mot-de-passe est stocké dans la session, ou n'importe quel attribut utilisateur (si d'autres mots-de-passe sont stockés dans la base de données des utilisateurs).

## Configuration

L'authentification basique est portée par un en-tête HTTP spécifique, tel que décrit ci-dessous. Il suffit donc de déclarer cet en-tête pour l'hôte virtuel dans le manager.

Par exemple, pour exporter l'identifiant (`$uid`) et le mot-de-passe (`$_password` si le mot-de-passe est stocké dans la session):

    Authorization => "Basic ".encode_base64("$uid:$_password", "")

Don't forget to add an empty string as second argument of encode_base64 to avoid insert of “newline” characters

LL::NG fournit une fonction spéciale nommée basic pour construire cet en-tête.

Ainsi l'exemple ci-dessous peut être écrit simplement :

    Authorization => basic($uid,$_password)

La fonction `basic` force la conversion des caractères UTF-8 en ISO-8859-1, qui peut être accepté par la plupart des serveurs HTTP.