Connexion

Flux d'authentification multipartite

Explorez un exemple spécifique d'un flux d'authentification complexe et multipartite. Vous découvrez comment Auth0 le simplifie.

multi-party-authentication-flow

Le problème

Lorsque votre activité dépend de la mise en production rapide de vos applications personnalisées, vous avez besoin d'une plateforme IAM conçue par des développeurs, pour des développeurs. Voyons comment Auth0 facilite la mise en œuvre des workflows d'identités, même les plus sophistiqués, afin de passer plus rapidement vos applications en phase de production avec une sécurité renforcée et une maintenance réduite.

Imaginez que vous développez « Lodging Picks », une application SaaS B2Bque vous souhaitez vendre aux entreprises dans le secteur du voyage. Vous regroupez des annonces d'hébergement, puisées dans plusieurs sources, incluant des hôtels et RoomSMart, une place de marché en ligne très similaire à AirBnB. Elle met en relation des hôtes ayant des chambres à louer avec des voyageurs à la recherche de solutions d'hébergement à domicile économiques. Le défi : réserver des hébergements RoomSMart par le biais de leur API1 privée, au nom des utilisateurs de vos clients, sans détenir les informations d'identification de comptes RoomSMart.

  1. Nous aurions pu prendre l'exemple d'AirBnB, mais nous ne voulions pas laisser entendre qu'ils proposent d'utiliser à leurs partenaires une telle API privée. Imaginez que RoomSMart est similaire à AirBnB et que ce cas d'utilisation illustre un scénario réaliste d'authentification multipartite.

Les défis

Pourquoi ce flux d'authentification multipartite implique-t-il une mise en œuvre complexe ? Examinons les préoccupations des parties concernées dans ce scénario :

  • L'entreprise souhaite bénéficier des avantages de Lodging Picks pour son activité, mais elle doit contrôler l'accès de ses employés à cette application. Elle a aussi besoin d'une utilisation simple. Par conséquent, l'entreprise souhaite intégrer Lodging Picks dans son infrastructure SSO. Elle doit être en mesure de provisionner et de déprovisionner les employés Lodging Picks lorsqu'ils rejoignent et quittent l'entreprise.
  • L'employée veut réserver des hébergements avec l'application, y compris des chambres RoomSMart, mais elle doit contrôler l'accès à son compte RoomSMart depuis Lodging Picks. Lodging Picks doit notamment avoir un accès limité à la seule fonction de réservation des chambres en utilisant le mode de paiement par défaut de son compte. Elle n'a pas accès à l'évaluation des hôtes, à l'envoi de messages ou à la modification des informations sur les profils ou les paiements. En outre, elle doit pouvoir révoquer l'accès en cas de problème et garder son profil RoomSMart privé.
  • Lodging Picks souhaite offrir un service de qualité à ses clients d'entreprise, avec une excellente expérience utilisateur SSO et un nouveau canal commercial pour RoomSMart. Mais dans un monde où les failles de sécurité font régulièrement la une des journaux, Lodging Picks doit négocier ces transactions, tout en minimisant la confiance exigée des parties participantes. Si chacun n'a pas la certitude que ses précieuses informations sont en sécurité et sous son contrôle, les risques liés à l'utilisation de cette application SaaS pourraient dépasser les avantages.
  • RoomSMart souhaite ajouter un nouveau canal B2B à ses ventes. Le développement de leur activité est basé sur la confiance : les hôtes offrent un espace dans leur maison à des étrangers, leurs clients ou convives, qui réservent des chambres après examen des informations présentées sur leur site Web, telles que descriptions des prestations, évaluations et commentaires des clients précédents. Comme les convives, les hôtes enregistrent des informations sensibles sur le service. RoomSMart doit assurer la confidentialité et se conformer aux lois et règlements, tout en offrant une expérience utilisateur très simple. En conséquence, ils n'autorisent probablement pas d'autres applications à stocker les identifiants de connexion. Ils contrôlent rigoureusement les accès à l'API, accordant un contrôle total aux propriétaires d'informations sensibles. Ils conservent la possibilité de faire respecter leurs conditions de service.

Si vous avez l'impression que tout cela est complexe, vous ne vous êtes pas trompé ! Ce projet est également typique des applications Web et mobiles modernes, développées en assemblant des services déployés dans « l'économie des API » à partir de sources indépendantes. L'authentification et l'autorisation sont les outils stratégiques qui gouvernent les modalités de confiance mutuelle entre ces services dans un environnement où la confiance est intrinsèquement une denrée rare.

Sur le marché actuel, aucune solution prête à l'emploi ne permet de gérer des workflows d'authentification sophistiqués et multipartites comme celui-ci. Les exigences dépassent largement les capacités des outils supportant de simples flux d'authentification intégrés. Pour mettre en œuvre Lodging Picks, vous devrez peut-être développer sur mesure une solution IAM spécialisée. Cela implique des coûts importants, le recrutement de spécialistes et la mise en place d'une maintenance continue et onéreuse. En fait, vous avez besoin d'une plateforme de gestion des identités pilotée par API, optimisée pour offrir un bon niveau de flexibilité aux développeurs, qui simplifie les applications et où l'identité devient une valeur qui dépasse les frontières organisationnelles. Vous avez besoin d'Auth0.

La solution : Les règles de redirection d'Auth0

Quels sont les besoins ? L'utilisateur, un employé de votre client, se connecte à Lodging Picks avec ses identifiants d'entreprise fédérés. Grâce au processus simplifié créé par Auth0, vous mettez facilement en place une authentification unique pour vos clients. Une fois l'utilisateur authentifié, votre workflow d'intégration permet à Lodging Picks d'utiliser l'API RoomSMart pour afficher et réserver des hébergements RoomSMart au nom de l'utilisateur.

Pourquoi ne pas simplement demander à l'utilisateur de se connecter à Lodging Picks avec ses identifiants d'entreprise et ses identifiants RoomSMart ? En effet, si vous liez les comptes, il pourra utiliser l'un ou l'autre pour accéder à Lodging Picks. Cette approche n'est pas acceptable, parce que l'utilisateur conserverait un droit d'accès à Lodging Picks avec son login RoomSMart, même après avoir quitté l'entreprise. L'accès à l'appli Lodging Picks ne doit être possible qu'en passant par le compte professionnel de l'employé, via une authentification unique.

Et si vous demandiez à l'utilisateur de sauvegarder son nom et son mot de passe RoomSMart dans l'appli Lodging Picks ? C'est une option possible, mais elle est contraire aux bonnes pratiques. La sécurité de RoomSMart et de l'employé serait alors nettement affaiblie. Lodging Picks pourrait devenir une cible de piratage plus attrayante. Par conséquent, RoomSMart aurait de bonnes raisons de l'interdire.

Alors, comment pouvez-vous obtenir uniquement l'accès nécessaire à RoomSMart au nom de l'utilisateur, sans détenir ses informations d'identification RoomSMart et en vous authentifiant uniquement en passant par le compte d'entreprise de l'utilisateur ?

 

Le pipeline des règles Auth0

Figure 1 : Le pipeline des règles Auth0

Auth0 inclut une fonctionnalité puissante : les règles d'authentification. Elles vous permettent d'insérer des portions de code exécutables après chaque authentification afin d'ajouter le traitement personnalisé dont vous avez besoin. Ces règles sont basées sur des portions de code personnalisables. Elles servent à déclencher l'enregistrement des transactions, l'établissement d'un lien avec une plateforme d'analyse, un processus d'authentification supplémentaire, par exemple une authentification multi-facteur, ou à appeler des API supplémentaires pour collecter des informations supplémentaires ou effectuer une ou plusieurs tâches supplémentaires. Avec les règles, vous pouvez rediriger des utilisateurs vers des sites ou des services externes et, au retour, exécuter des traitements supplémentaires sur les résultats obtenus. La possibilité d'ajouter n'importe quelle portion de code dans le pipeline d'authentification est l'une des caractéristiques les plus puissantes d'Auth0.

Exemple : la page d'autorisation

Avec seulement quelques dizaines de lignes de code JavaScript, vous mettrez en œuvre un workflow complexe d'authentification multipartite et multiprotocole, similaire à celui de Lodging Picks. Nous allons donc implémenter notre workflow en créant une règle (pour le prototype de code JavaScript, reportez-vous à l'annexe A, à la fin de ce cas d'utilisation). Lorsque la règle détecte qu'Auth0 n'a pas encore enregistré un jeton d'actualisation pour RoomSMart (par exemple lorsqu'un utilisateur s'inscrit pour la première fois sur Lodging Picks) elle interrompt son authentification et le redirige vers la page d'autorisation de l'API RoomSMart. Sur cette page et au nom de Lodging Picks, l'utilisateur autorise Auth0 à collecter et à conserver en toute sécurité un jeton d'actualisation API personnalisé dans son profil. Ce jeton pourra servir ultérieurement à obtenir un jeton d'accès avec des droits d'accès limités et une durée de vie courte. Lodging Picks peut ainsi appeler l'API d'Auth0 pour récupérer le jeton user.app_metadata_encrypted_roomsmart_refresh_token, après avoir obtenu le jeton d'accès. Ce qui lui permet d'effectuer des recherches et des réservations RoomSMart au nom de l'utilisateur. Dans ce processus, l'utilisateur garde un contrôle total. Il peut révoquer cet accès à tout moment dans son compte RoomSMart. Les jetons d'accès et d'actualisation peuvent aussi être révoqués par RoomSMart. Une autre règle peut être créée pour utiliser automatiquement le jeton d'actualisation afin d'obtenir un nouveau jeton d'accès avant l'expiration du premier.

Exemple : le workflow d'authentification multipartite

Figure 2 : Exemple : le workflow d'authentification multipartite

Exemple : l'application Téléphone

Avec les règles de redirection d'Auth0, vous pouvez interrompre le pipeline d'authentification et exécuter le service de votre choix. Vous n'êtes pas limité au seul code existant dans votre application. Grâce à cette puissante fonctionnalité, vous êtes libre d'exploiter tout l'écosystème des API Web et de créer des intégrations personnalisées à des applications d'entreprise.

Consultez la documentation complète et les exemples d'Auth0 pour en savoir plus sur l'utilisation des règles de redirection. Vous trouverez dans l'annexe A un prototype de règle pour ce cas d'utilisation spécifique.

Grâce à la flexibilité que vous apporte l'exécution de portions de code personnalisables, vous êtes libre de créer des flux d'authentification et d'autorisation complexes, sans développer ni maintenir une solution IAM personnalisée. Outre les accroches simples, vous bénéficiez du support complet de la plateforme front-end et back-end d'Auth0 pour accélérer le développement.

Pour implémenter vos applis natives IOS et Android, vos développeurs peuvent tirer parti de ce workflow de production d'identité, sans travail supplémentaire. En effet, les applis mobiles utilisent les mêmes API Auth0. Vraiment facile !

Conclusion

Les applications Web et mobiles modernes s'appuient sur des services appelés par des API hébergées par des entreprises et des entités indépendantes. Dans un tel écosystème d'API, la sécurité dépend du processus d'authentification. Tous les appels sur API pour accéder à des informations d'identification personnelle et à des actions sensibles doivent être légitimes et approuvés par les propriétaires des comptes. Tous les services qui utilisent ces API doivent aussi connaître ces autorisations. Comme la complexité des applications continue de progresser, les comportements d'utilisation et les exigences d'accès de ces API indépendantes sont imprévisibles et ne peuvent pas être intégrés dans des modèles conceptuels rigides. L'économie de l'API exige une flexibilité au niveau du code pour gérer les flux d'authentification. Les développeurs peuvent aisément créer des flux personnalisés grâce aux règles du pipeline d'authentification Auth0. Elles permettent aussi aux utilisateurs finaux de parcourir facilement ces scénarios où une authentification multipartite est nécessaire.

Auth0 a l'avantage de bénéficier d'une autre fonction unique : son équipe chargée de la réussite client, dont l'efficacité est largement reconnue. L'assistance est rapide. Il suffit d'un chat sur Slack ou d'un e-mail pour surmonter tous les obstacles et mettre en production des applications stratégiques.

Pour en savoir plus, contactez directement l'équipe commerciale Auth0 ou faites simplement un essai gratuit. L'ensemble des capacités de la plateforme Auth0 est toujours gratuit pour les nécessités du développement. Créez votre compte gratuit aujourd'hui sur auth0.com et vous découvrirez la différence d'une solution pilotée par les développeurs.

Annexe A : Prototype de code

Cet exemple de code illustre la règle appliquée dans ce cas d'utilisation. Un code d'autorisation est obtenu grâce au flux de consentement RoomSMart. Ce code est ensuite échangé contre un jeton d'actualisation. La règle chiffre ensuite ce jeton d'actualisation et l'enregistre comme métadonnée d'application dans le profil de l'utilisateur.

function(user, context, callback) {
    // If we already have the user's refresh token, don't ask for consent again.
    user.user_metadata = user.user_metadata || {};
    if (user.app_metadata.encrypted_roomsmart_refresh_token) {
        return callback(null, user, context);
    }

    var CLIENT_ID = '123456';
    var CLIENT_SECRET = 'ABCDEFG';

    // Redirection vers l'application Web RoomSMart pour demander le consentement.
    if (context.protocol !== 'redirect-callback') {
        var REDIRECT_TO = 'https://roomsmart.com';
        var REDIRECT_PATH = '/oauth2/authorize?client_id=' + CLIENT_ID +
            '&redirect_uri=http://lodgingpicks.auth0.com/continue&response_type=code' +
            '&scope=offline_access%20read_account';

        context.redirect = {
            url: REDIRECT_TO + REDIRECT_PATH
        };

        return callback(null, user, context);
    }
    // Nous sommes redirigés en arrière.
    else {

        // No consent given.
        if (context.request.query.error) {
            return callback(new UnauthorizedError(context.request.query.error_description));
        }

        // Consentement obtenu. Échange du code d'autorisation contre des jetons.
        var token_request = {
            body: 'grant_type=authorization_code' +
                '&client_id=' + CLIENT_ID +
                '&client_secret=' + CLIENT_SECRET +
                '&redirect_uri=http://lodgingpicks.auth0.com/continue' +
                '&code=' + context.request.query.code
        };
        request.post('https://roomsmart.com/oauth2/token', token_request, function(err, res, body) {
            if (err) {
                return callback(err);
            }

            var token_response = JSON.parse(body);
            if (!token_response.refresh_token) {
                return callback(new UnauthorizedError('Refresh token is missing'));
            }

            // Chiffrement du jeton d'actualisation.
            user.app_metadata.encrypted_roomsmart_refresh_token = encrypt(token_response.refresh_token);

            // Enregistrement dans le profil de l'utilisateur.
            auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
                .then(function() {

                    // Continue the authentication transaction.
                    callback(null, user, context);
                })
                .catch(function(err) {
                    callback(err);
                });
        });
    }

    // Assistance au chiffrement des données sensible.
    function encrypt(data) {
        var iv = new Buffer(configuration.ENCRYPT_IV);
        var decodeKey = crypto.createHash('sha256')
            .update(configuration.ENCRYPT_PASSWORD, 'utf-8').digest();
        var cipher = crypto.createCipheriv('aes-256-cbc', decodeKey, iv);
        return cipher.update(JSON.stringify(data || {}), 'utf8', 'base64') + cipher.final('base64');
    }
}

Inscription gratuite

Commencez à construire et à sécuriser vos applis dès aujourd'hui avec la plateforme d'identité Auth0.

3D login box