Utiliser un proxy COMHUB

Javascript possède toutes les fonctionnalités nécessaires pour une intégration très simple de l'API COMHUB depuis le navigateur d'un poste client. L'intégration des fonctions téléphoniques TeamBox à ce niveau permet de réaliser très rapidement des interfaces utilisateur exploitant les services disponibles de votre serveur Teambox: montée de fiche, click-to-call, suivi d'appels, etc.

Problème du « cross-domain scripting »

Si il est extrêmement simple d'interfacer des webservices depuis un navigateur Internet, les contraintes de sécurité rendent les choses plus complexes dès qu'on veut interfacer des ressources WEB de domaines différents. Ca sera le cas si vous désirez intégrer les fonctions COMHUB dans une application tiers, forcément hébergée dans des domaines distincts.

Sans entrer dans les détails, les navigateurs interdisent l'utilisation d'un web service si leur adresse n'est pas rattachée au même domaine que celui du document web depuis lequel on veut s'y connecter.

Il existe plusieurs techniques de contournement, certaines de l'ordre du bricolage dont nous ne parlerons pas, et d'autres plus pérennes et portables, mais un peu plus complexes dans leur mise en œuvre.

Authentification HTTP

La deuxième contrainte sécuritaire qui rends les choses moins simples est le besoin de gérer des connections HTTP authentifiées pour l'accès aux webservices COMHUB. Si on veut faire cela depuis le navigateur, le problème des logins multiples (un pour COMHUB, un pour l'application hôte) se pose est n'est pas facile à régler à ce niveau, sauf à concevoir un mécanisme d'authentification différent en remplacement d'HTTP, ce qui est à la fois difficile est risqué.

Utilisation d'un proxy COMHUB

La solution la plus souple consiste à intégrer, coté serveur, dans l'application hôte, un mini-proxy dont le rôle est d'exposer à l'application, dans son propre domaine, l'accès à l'API COMHUB.

Techniquement, ce composant ne fait que rediriger les requêtes COMHUB en provenance du poste client vers le serveur COMHUB Teambox (et achemine les données de retour dans l'autre sens). Cette technique permet de résoudre les deux problèmes principaux: la barrière du « cross domain scripting » et l'authentification. Attention cependant: la sécurisation d'un service étant une chaine dont la résistance correspond à son maillon le plus faible, il convient d'étudier attentivement ces aspects lors de l'ajout de ce maillon supplémentaire. Enfin, cette mécanique ajoute un délai de traitement supplémentaire à cause de la double connexion.

Exemple de proxy COMHUB (PHP)

(NOTE: ce code n'a pour seul but que de vous aider à effectuer quelques tests d'intégration, et n'a certainement pas vocation a être utilisé dans un environnement de production)

$server="myserver.clients.teambox.fr";
$userid=$_SERVER['PHP_AUTH_USER'];
$passwd=$_SERVER['PHP_AUTH_PW'];
$values=$_GET;
$rq=urlencode($values["rq"]);
unset($values["rq"]);
$url="${server}/comhubws/index.cgi?rq=$rq";
foreach($values as $k => $v)
{
    $url .= sprintf("&%s=%s",urlencode($k),urlencode($v));
}
$fd=fopen("https://${userid}:${passwd}@${url}","r");
if(!$fd)
{
    header("HTTP/1.0 404 Not Found");
    exit(0);
}
if($http_response_header)
{
    foreach($http_response_header as $h)
    {
        header($h);
    }
}
else
{
    header("Content-type: text/plain; charset=utf-8");
}
while($data=fread($fd,1000))
{
    print $data;
}
exit(0);