Processus d'authentification v0.6

SDK du Répertoire des applis

Processus d'authentification (v0.6, obsolète)

Le but de la plupart des applis est de fournir à l'utilisateur des contenus spécifiques et des capacités d'interaction. Avant de mettre en place l'authentification, votre appli doit être indépendante de l'utilisateur Hootsuite qui l'utilise. Cette page décrit les techniques qui permettent d'authentifier un utilisateur Hootsuite avec votre appli.

Notez que ces techniques ne constituent PAS une méthode pour s'authentifier avec des prestataires de services externes. Le paramétrage de l'authentification avec un prestataire externe relève de votre responsabilité ; vous êtes libre d'utiliser n'importe quel type de méthode d'authentification qu'il prend en charge.

Pour décider quel type d'authentification convient le mieux à vos besoins, prenez en compte les caractéristiques suivantes :

  • Authentification SSO : permet d'indiquer à un flux de votre appli quel utilisateur Hootsuite le consulte en fournissant un ID utilisateur. L'usurpation de cet ID utilisateur est empêché grâce à une valeur de hachage (jeton de sécurité), permettant ainsi l'authentification de la requête.
  • OAuth : fait la même chose que l'authentification SSO mais, au lieu de transmettre un ID utilisateur et une valeur de hachage, envoie un identifiant de session (jeton de session) qui a été négocié au préalable entre Hootsuite et votre appli. En outre, lors de l'installation de votre appli, l'utilisateur doit se connecter à son compte qui existe dans votre propre base d'utilisateurs, et vous devez stocker son identifiant de compte (de façon à le faire correspondre au jeton de session lors d'une consultation du flux). L'identifiant de compte saisi est ainsi associé à l'installation de votre appli.

Par conséquent, OAuth est utile si vous voulez connecter un utilisateur de votre propre base d'utilisateurs à votre appli, mais il demande aussi aux utilisateurs d'installer votre appli plusieurs fois s'ils souhaitent se connecter avec différents comptes. C'est ce que l'on appelle le mode « par-appli ».

Bien sur, vous pouvez également choisir de permettre à un utilisateur de se connecter à n'importe quel autre compte utilisateur et l'associer manuellement à votre appli vous-même en utilisant l'authentification SSO. Il ne tient qu'à vous de connecter un compte d'utilisateur de cette façon. Vous pouvez proposer des comptes de connexion depuis votre propre base d'utilisateurs ou implémenter une authentification avec un prestataire de services externe (en utilisant une méthode d'authentification qu'il prend en charge). Qu'ils appartiennent à un type ou l'autre, appelons les comptes tiers pour faciliter la lecture de ce document. Gardez bien à l'esprit : si vous devez associer un compte tiers en mode « par-appli » avec votre appli tout comme pour le mode OAuth décrit ci-dessus, vous allez certainement causer des problèmes aux utilisateurs étant donné qu'un utilisateur peut ajouter des flux de votre appli plusieurs fois et qu'il sera impossible pour vous de tenir compte de l'état d'authentification actuel de chaque flux après qu'un utilisateur a complété l'authentification ou la désauthentification de son compte tiers au sein de l'un des flux. C'est pourquoi il est souvent recommandé d'associer un compte tiers avec un flux unique à la place. C'est ce que l'on appelle le mode « par-flux ».

Cette authentification de compte tiers « par-flux » a également le bénéfice de permettre à un utilisateur de se connecter à plusieurs comptes en même temps, chacun sur son propre flux, sans avoir besoin d'installer votre appli plusieurs fois.

L'un des paramètres d'URL transmis aux flux est l'ID de placement du flux, le pid. Il est unique pour chaque flux ajouté par un utilisateur et il est utile pour la mise en place de l'authentification « par-flux » d'un compte tiers.

Authentification SSO

Un identifieur d'utilisateur, un horodatage et une clé secrète (salt), partagés entre Hootsuite et le développeur de l'appli, sont hachés ensemble en utilisant l'algorithme SHA-1, puis transmis à l'appli. Le hachage de vérification peut être recalculé par le développeur de l'appli et comparé à celui qui a été envoyé. S'ils correspondent, l'utilisateur qui a été référencé par l'identifieur peut alors être autorisé à se connecter.

En utilisant cette méthode, un tiers n'est pas en mesure d'usurper un hachage de vérification sans connaître la clé secrète partagée. Toutefois, cette méthode est vulnérable à une attaque par rejeu si un attaquant est capable d'intercepter un trafic réseau non crypté et qu'il voit la chaine de requête. Ce problème peut être réduit en utilisant le protocole https et en vérifiant que l'horodatage est récent.

Par défaut, l'identifieur d'utilisateur fourni est un identifieur unique qui est lié au compte Hootsuite de l'utilisateur. Vous pouvez également autoriser l'utilisateur à saisir un identifieur (adresse e-mail, nom d'utilisateur, etc.) à transmettre à votre appli. Ceci ne doit toutefois être utilisé que si les données affichées par votre appli sont de nature publique étant donné que n'importe quel utilisateur pourrait saisir l'adresse e-mail d'un autre utilisateur.

Exemple d'URL :

https://app.somewhere.com?i=1667985&ts=1310681657&token=231a3fb74139c74c37e9111ceb59ce02a349ef88

L'appli devrait valider ces paramètres comme tels :

$secret = 'sharedSecretABCD1234'; // defined in App configuration at hootsuite.com/developers $user_id = $_REQUEST['i']; $timestamp = $_REQUEST['ts']; $token = $_REQUEST['token']; if (sha1($user_id . $timestamp . $secret) == $token) { echo "Successful login!"; }

Paramètres d'URL transmis au flux d'application iFrame :

lang=en timezone=7200 pid=2823 // placement ID, unique for each stream per user uid=1234567 // Hootsuite user ID i=1234567 // user identifier (optionally entered by user upon App installation) ts=1318362023 // timestamp token=123abc... // security token (sha1 hash)

OAuth

Configurer une authentification OAuth nécessite des connaissances approfondies de l'architecture OAuth, car vous devez implémenter un paramètre « Prestataire de service » respectant les spécifications OAuth, telles qu'elles sont expliquées dans le diagramme ci-après. Bien que cela prenne plus de temps à mettre en place qu'une authentification SSO, les principaux avantages comprennent une meilleure sécurité ainsi qu'une expérience d'utilisateur plus transparente, puisque l'on demande à l'utilisateur de se connecter à votre appli lorsqu'il l'installe.

Hootsuite utilise une implémentation OAuth standard, avec l'ajout d'une étape supplémentaire durant laquelle Hootsuite récupère un identifiant de session depuis le paramètre d'authentification de l'appli (en utilisant une récupération authentifiée OAuth). Vous allez devoir mettre en place ce paramètre d'authentification en plus du paramètre « Prestataire de service » OAuth.

Le diagramme ci-dessous explique la procédure d'authentification, commençant par le processus OAuth standard qui est déclenché lorsqu'un utilisateur installe l'appli, se poursuivant avec la validation du jeton d'accès par le paramètre d'authentification et s'achevant avec la connexion de l'utilisateur à l'appli.

hsOauth.45b015e3

Paramètre d'authentification

La première fois qu'un flux d'application est ouvert, aucun jeton de session n'est transmis car Hootsuite n'en a pas encore sur fichier. À ce moment, l'appli doit appeler la fonction hsp.startAppTokenAuth() qui déclenche Hootsuite pour activer la demande d'un jeton de session depuis le paramètre d'authentification de l'appli. Une fois qu'Hootsuite a reçu le jeton, il recharge le flux d'application, en transmettant cette fois le token qui est validé à son tour par l'appli. Si ce jeton correspond à celui fourni par le point de terminaison d'authentification, on peut alors considérer que l'utilisateur est authentifié.

Une autre manière de voir ce processus est de dire que l'étape d'échange de jeton utilise OAuth pour connecter un utilisateur à votre site. Vous générez un identifiant de session comme vous le feriez pour n'importe quelle autre action de connexion d'utilisateur mais à la place, vous l'envoyez à Hootsuite qui peut ensuite le transférer lorsque l'appli est chargée pour identifier l'utilisateur actuellement connecté.

Plus en détails :

  • L'utilisateur Hootsuite charge le flux d'application, l'appli est chargée depuis le serveur du prestataire d'appli, aucune information d'identification n'est échangée.
  • L'appli détecte qu'il n'y a pas de session d'utilisateur et qu'aucune information d'authentification n'a été transmise, il affiche alors un message « Logging in » et appelle le javascript hsp.startAppTokenAuth() qui entame un échange de jeton de session.
  • Une requête est lancée en arrière-plan depuis les serveurs de Hootsuite jusqu'au point de terminaison d'authentification de l'appli, qui vérifie alors la validité des jetons OAuth et qui renvoie un identifiant de session.
  • L'iframe de l'appli est chargée à nouveau, cette fois-ci en transmettant l'identifiant de session. L'appli valide l'identifiant de session et l'utilise pour ouvrir une session d'utilisateur.

Hootsuite va continuer à transmettre le jeton de session dont il dispose à chaque fois qu'un flux d'application est chargé. La durée de validité du jeton de session est choisie par le développeur de l'appli. Si votre appli considère que la session est terminée ou invalide d'une quelconque manière, la fonction hsp.startAppTokenAuth() doit être appelée à nouveau pour déclencher la création d'un nouveau jeton de session.

Validation de jeton d'accès

Le point de terminaison d'authentification de l'appli doit valider un jeton d'accès, tel qu'indiqué dans les spécifications OAuth, puis retourner une chaîne encodée en JSON contenant un « session_token » :

echo json_encode(array('result'=>'success', 'session_token'=>'abcd1234'));

{"result":"success","session_token":"abcd1234"}

Ou, si le jeton ne peut pas être validé :

{"result":"fail","reason":"Some error message"}

Si les informations d’identification transmises au point de terminaison d'authentification ne sont pas valides, l'appli peut demander à Hootsuite d'ouvrir la boîte de dialogue « edit app » de l'utilisateur en utilisant l'appel de fonction hsp.editAppAuth(), qui donne la possibilité à l'utilisateur Hootsuite de saisir de nouvelles informations d'identification ou de redémarrer le processus OAuth.

Vous trouverez une liste de liens d'implémentations OAuth dans différents langages de programmation (qui comportent souvent du code utilisable pour la conception d'un prestataire OAuth) à l'adresse suivante : http://oauth.net/code/