Passer au contenu principal
Toutes les collectionsFonctionnalités et API
Implémentation de l'identification OpenID Connect avec brainCloud
Implémentation de l'identification OpenID Connect avec brainCloud

Comment authentifier les utilisateurs finaux de votre application à l'aide d'OpenID Connect

Paul Winterhalder avatar
Écrit par Paul Winterhalder
Mis à jour il y a plus d’une semaine

Qu'est-ce qu'OpenID Connect

OpenID Connect est un protocole d'authentification interopérable basé sur le cadre de spécifications OAuth 2.0 (IETF RFC 6749 et 6750). Il simplifie la vérification de l'identité des utilisateurs grâce à l'authentification effectuée par un serveur d'autorisation et permet d'obtenir des informations de profil utilisateur de manière interopérable et de type REST.

OpenID Connect permet aux développeurs d'applications et de sites web de lancer des flux de connexion et de recevoir des assertions vérifiables sur les utilisateurs sur des clients web, mobiles et JavaScript. De plus, la suite de spécifications est extensible pour prendre en charge diverses fonctionnalités optionnelles telles que le chiffrement des données d'identité, la découverte des fournisseurs OpenID et la déconnexion de session.

Pour les développeurs, cette solution offre une réponse sécurisée et vérifiable à la question: "Quelle est l’identité de la personne qui utilise actuellement le navigateur ou l’application mobile connectée?" Mieux encore, elle supprime la responsabilité de définir, de stocker et de gérer les mots de passe, souvent associée aux violations de données liées aux identifiants.

OpenID Connect sur brainCloud

Pour des raisons de sécurité, les flux de connexion OpenID nécessitent un navigateur Web pour collecter les informations d'identification de l'utilisateur qui se connecte. Ces informations d'identification ne sont jamais vues par l'application cliente (ou brainCloud) - ce qui est l'une des raisons pour lesquelles OpenID est si sécurisé.

L'application cliente du développeur est responsable de l'implémentation et du lancement du processus de connexion OpenID. Les détails de cette opération n'entrent pas dans le cadre de ce document (ni de nos librairies clientes).

Une fois que la connexion a renvoyé le jeton JWT, l'application doit lancer une authentification externe avec brainCloud via l'appel d'API client AuthenticateExternal().

L'authentification externe utilise un script d'authentification externe personnalisé - comme nous le faisons avec quelques propriétés globales clés - pour effectuer l'authentification.

Ce diagramme décrit le flux global:

Authentification externe

L'authentification externe est une authentification basée sur un script qui permet à brainCloud de fonctionner avec pratiquement n'importe quel fournisseur d'identité externe, y compris OpenID Connect.

Pour utiliser l'authentification externe, le développeur écrit un script personnalisé qui sera utilisé à cette fin et le configure sur la page Conception > Authentification > Externe de l'application.

Nous avons fourni un exemple de script (qui exploite quelques propriétés globales pour plus de commodité) pour effectuer cette authentification.

Vous trouverez plus d'informations sur les scripts d'authentification externe ici .

Script d'authentification externe

Voici un exemple de script permettant d'exécuter les actions de base d'OpenID Connect. Ce script doit être défini sans autorisation client (c'est-à-dire que les options d'appel client, serveur et appairage doivent être définies sur "False").

script openIdAuth

"use strict";

function main() {

var response = {valid:false}; // by default assume authentication fails

// jksUri (clés Web JSON) - diffère grandement selon le fournisseur - exemple: https://domain.com/v1/keys
var jksUri = bridge.getGlobalProperty("oidJKSUri");

// issuer - ressemblera à quelque chose comme:
// https://domain.com/oauth2/default
var issuer = bridge.getGlobalProperty("oidIssuer");

// audience - l'audience du jeton - ressemblera à quelque chose comme:
// api://default
var audience = bridge.getGlobalProperty("oidAudience");

// Vérifier le jeton OID
var identityProxy = bridge.getIdentityServiceProxy();
var oidResponse = identityProxy.verifySignedJwt(
jksUri , issuer, audience, data.authenticationToken);


if ( oidResponse.status == 200 )
{
// Vérification JWT réussie - mais effectuons quelques vérifications supplémentaires.
// L'externalId transmis sera utilisé pour identifier l'utilisateur.
// Le client peut choisir de transmettre soit :
// - l'adresse e-mail de l'utilisateur
// - ou son SUB
// Nous recommandons le SUB car il est plus résilient.
var userId = data.externalId; // Okta User Id
var userIdType ="EMAIL";
if ( userId.indexOf("@") == -1 ) {
userIdType ="SUB";
}

// Confirmer que l'externalId correspond à ce qui est présent dans le jeton JWT
if ( (( userIdType == "EMAIL" ) && ( userId == oidResponse.email )) ||
(( userIdType == "SUB" ) && ( userId == oidResponse.sub )) )
{
// La requête a réussi et
// CORRESPOND à l'utilisateur qui a initié la requête
response.valid = true;
}
}
else
{
// La requête comportait une erreur - elle était supposée fausse par défaut
// Pas besoin de définir la propriété valide
}

return response;
}

main();

Notez que ce script effectue des appels VerifySignedJwt() qui constituent une partie importante de son traitement. La documentation relative à cet appel est disponible ici.

Propriétés globales associées

Bien entendu, les propriétés globales auxquelles le script fait référence doivent être configurées pour l'application. Cette opération s'effectue sur la page Conception > Cloud Data > Propriétés globales .

Tous les éléments doivent être configurés comme des chaînes. Si les valeurs doivent être modifiées pour les instances DEV, STAGING et PROD de votre application, assurez-vous de cocher l'option [x] "Préserver la valeur pendant le déploiement".

---

Nous espérons que cela vous aidera à configurer l’authentification basée sur OpenID Connect pour vos applications brainCloud!

Donc, pour résumer, vous devez:

  • Créer le script openidAuth

  • Configurer l'identité externe de l'application

  • Créez les propriétés globales qui seront utilisées depuis l'application

  • Implémenter la fonctionnalité de connexion OpenID dans l'application client (lancement d'une interface Web pour effectuer la connexion)

  • Récupérez le JWT renvoyé par OpenID Connect et appelez AuthenticateExternal() en le passant:

    • l'identifiant "sub" (ou alternativement l'adresse e-mail) du JWT dans le paramètre externalId

    • le JWT comme paramètre authenticationToken

Si vous rencontrez des problèmes, n'hésitez pas à contacter notre équipe d'assistance.

Bon codage!

Avez-vous trouvé la réponse à votre question ?