Se connecter avec le nom d'utilisateur
Cet article explique comment utiliser un mécanisme d'authentification personnalisé pour créer une session authentifiée. Ce scénario utilise une authentification par nom d'utilisateur uniquement, ce qui n'est pas recommandé pour les déploiements en production, mais qui est utilisé ici afin de présenter les concepts suivants :
- Page personnalisée pour collecter le nom d'utilisateur
- Échange du nom d'utilisateur pour une session de connexion
Il peut être facilement étendu pour ajouter de véritables formes d'authentification, telles que l'authentification mobile basée sur le push à l'aide de l'application IBM Verify.
Attention !Ce mécanisme d'authentification ne doit jamais être utilisé comme flux prêt à la production. Il est utilisé ici pour illustrer l'approche qui peut être adoptée pour construire un flux de connexion personnalisé. Cependant, l'authentification par un nom d'utilisateur valide sans défis et garanties supplémentaires est très faible et ne doit jamais être utilisée dans le monde réel.
Vue d'ensemble du flux
Le processus commence par inviter l'utilisateur à saisir un nom d'utilisateur via une page personnalisée simple. Ce nom d'utilisateur est ensuite utilisé comme sous-réclamation dans un JSON Web Token (JWT). Le JWT est envoyé via le flux d'autorisation JWT Bearer de l' OAuth 2.0 afin d'obtenir un jeton d'accès utilisateur. Ce jeton d'accès est échangé contre une session de navigateur authentifiée à l'aide de l 'API de session.
Le flux peut être amélioré pour inclure la découverte du mécanisme d'authentification pour l'utilisateur et déclencher ensuite des flux d'authentification plus réalistes à l'aide des API de vérification.
Ressources
Cet article utilise des ressources de fichiers importables qui peuvent être trouvées dans le sous-répertoire authenticate_with_username du dépôt GitHub verify-saas-resources.
Pour plus d'informations sur le référentiel GitHub, qui contient des ressources d'accompagnement pour les exemples de flux, consultez la section Ressources associées de la page de présentation du Flow Designer.
Prérequis
- IBM Verify locataire
- Le concepteur de flux est activé dans votre locataire
- Contenu des ressources IBM Verify SaaS téléchargé ou cloné sur votre machine. Pour plus d'informations sur la manière de procéder, consultez la page principale. Le dossier est désigné ci-après par le terme
$GIT_REPO.
Installation et configuration
Thème de marque personnalisé
Ce flux présente des pages personnalisées et un thème doit donc être créé pour éviter d'affecter les flux utilisant le thème par défaut. Il existe deux fichiers personnalisés :
- custom_page1.html: Cette page demande le nom d'utilisateur.
- custom_page2.html: Cette page affiche une erreur en cas d'échec du flux.
Connectez-vous à la console d'administration d' IBM Verify, puis suivez les étapes suivantes :
-
Dans le menu latéral principal, sélectionnez Expérience utilisateur, puis cliquez sur Identité visuelle.
-
Créez un nouveau thème de marque appelé "Login with username". Vous pouvez suivre les étapes mentionnées ici.

-
Une fois le thème créé, cliquez sur la vignette du thème pour afficher la structure des dossiers.
-
Développez "workflow" > "pages" et cliquez sur les trois points verticaux à côté de custom_page1.html ". Cliquez sur "Télécharger".

-
Choisissez $GIT_REPO/flows/authenticate_with_username/theme/templates/workflow/pages/default/custom_page1.html " dans le dossier local. Cliquez ensuite sur "Télécharger".

-
Comme à l'étape précédente, dans workflow > pages, cliquez sur les trois points verticaux situés à côté de custom_page2.html. Cliquez sur "Télécharger".
-
Choisissez $GIT_REPO/flows/authenticate_with_username/theme/templates/workflow/pages/default/custom_page2.html " dans le dossier local. Cliquez ensuite sur "Télécharger".
Créer une application OIDC prenant en charge le flux d'autorisation JWT Bearer de l' OAuth 2.0
Le flux d'octroi JWT Bearer de l' OAuth 2.0 est utilisé par le flux Connexion avec un nom d'utilisateur pour obtenir un jeton d'accès utilisateur. Ce jeton est ensuite échangé contre une session authentifiée du navigateur web.
-
Dans le menu de gauche, sélectionnez "Applications" et cliquez sur "Applications"
-
Sélectionnez "Ajouter une application" pour ouvrir le catalogue d'applications. Sélectionnez Application personnalisée, puis cliquez sur Ajouter une application.

-
L'écran suivant est l'assistant de définition de l'application. L'onglet de départ présente des paramètres généraux qui permettent de configurer des métadonnées d'application spécifiques. Ici, décochez la case "Show on launchpad" et indiquez le nom de l'entreprise. Vous pouvez indiquer IBM Lab" pour la valeur de l'entreprise.

-
Sélectionnez l'onglet Sign-On pour configurer la définition de l'application. Il y a quelques options à configurer. Suivez les étapes suivantes pour configurer l'application :
- Méthode de connexion - OpenID Connect 1.0
- Types de subventions - JWT bearer
- Client public (sans clé secrète)- Activé
- URI JWKS - https://yourtenant.verify.ibm.com/oauth2/jwks
- Identification de l'utilisateur via un JWT bearer - Nom d'utilisateur
- Sous "Paramètres du jeton", expiration du jeton d'accès (secondes)- 300

-
Sauvegardez la configuration
-
Vous êtes redirigé vers l'écran Droits. Étant donné que le flux authentifie les utilisateurs uniquement à l'aide d'un nom d'utilisateur valide, limitez l'accès aux utilisateurs ou groupes désignés à des fins de test, comme indiqué.

-
Retournez à l'onglet "Sign-on" et copiez l'identifiant du client de l'OIDC. Copiez-le dans un fichier texte.

Attention !Compte tenu de la faible sécurité de l'authentification utilisée dans ce flux, n'ajoutez que les utilisateurs désignés dans l'onglet Droits d'accès de l'application. Assurez-vous que ces utilisateurs ne sont pas administrateurs et qu'aucun rôle leur n'a été attribué leur conférant des droits d'accès étendus, car cela pourrait compromettre par inadvertance la sécurité de votre tenant.
De même, assurez-vous que ces utilisateurs n'ont pas accès aux applications critiques de l'entreprise par le biais de ce processus de connexion.
Importer le flux de travail
-
Dans le menu latéral principal, sélectionnez Expérience utilisateur, puis cliquez sur Concepteur de flux.
-
Cliquez sur l'icône d'importation située à côté du bouton Créer un flux.

-
Remplissez les informations demandées et téléchargez le fichier situé à l'adresse $ GIT_REPO/flows/authenticate_with_username/authenticate_with_username.json. Deux types de formats de fichiers sont pris en charge lors de l'importation :
(1) JSON.
(2) BPMN.
Le format BPMN est appelé à être abandonné conformément au calendrier indiqué ici. Il est recommandé d'utiliser plutôt le format JSON.
-
Cliquez sur "Importer un flux". Cela ouvre l'éditeur.
-
Vous pouvez utiliser l'option Mise en page automatique pour améliorer la présentation du diagramme de flux, comme illustré.

-
Sélectionnez la tâche "Set Vars" et modifiez la valeur "client_id" avec celle de l'application OIDC.

-
Sélectionnez la tâche "Prompt : Nom d'utilisateur" et définissez le thème "Connexion avec le nom d'utilisateur".

-
Cliquez sur Enregistrer puis sur Publier.
Le flux d'eau est en marche
-
Dans le concepteur de flux, cliquez sur l'icône des paramètres située dans le coin supérieur droit, à côté de Enregistrer et publier. Copiez l'URL d'exécution à partir des paramètres généraux.

-
Ouvrez un onglet incognito ou un navigateur complètement différent et naviguez jusqu'à l' URL.

-
Saisissez le nom d'utilisateur et cliquez sur "Continuer".
-
Si le nom d'utilisateur est valide, l'utilisateur sera connecté et verra le panneau de lancement de l'application.
RemarqueCe nom d'utilisateur doit appartenir à un compte d'utilisateur dans le domaine natif de Cloud Directory ( "cloudIdentityRealm" et ne pas être stocké en tant qu'utilisateur appartenant à une source d'identité externe comme IBMid. Si vous souhaitez utiliser une source d'identité externe, ajoutez "@IDS_REALM". Par exemple, pour les utilisateurs IBMid, ajouter "@ www.ibm.com.
Déballer le flux
Il s'agit d'une section facultative qui permet d'entrer dans les détails du flux de travail.
Invite : Nom d'utilisateur
Cette tâche présente la page personnalisée qui affiche le champ du nom d'utilisateur. L'attribut HTML name est défini sur "username". Tous les paramètres soumis sont stockés dans le contexte du flux. Ainsi, lorsque le formulaire HTML est soumis, le contexte du flux est mis à jour avec "nom d'utilisateur" comme nom de propriété et la valeur fournie par l'utilisateur.
L' URL l'action HTML FORM renvoie au flux de travail référencé par la macro @WORKFLOW_CALLBACK_URL@ dans le modèle de page.
La case à cocher Action requise, illustrée dans l'image ci-dessous, associe l'événement de soumission du formulaire au moment où le workflow doit reprendre. Lorsqu'elle est sélectionnée, cette option indique au flux de s'interrompre et d'attendre une action de l'utilisateur avant de poursuivre.
Pour en savoir plus sur la tâche de la page, cliquez ici.
Obtenir le jeton d'utilisateur
Cette tâche utilise le langage d'expression commun utilisé dans Verify pour les scripts. Les actions suivantes
sont effectuées :
-
Génère un jeton Web JSON signé à l'aide de la fonction
jwt.sign. Ce JWT est signé par un certificat personnel dans le magasin de gestion des certificats du locataire.ctx.usernameest le nom d'utilisateur soumis par l'utilisateur.- context: > userJWT := jwt.sign({ "sub": ctx.username, "iss": "https://" + ctx.__tenantid, "aud": "https://" + ctx.__tenantid + "/oidc/endpoint/default/token", "jti": genUUID() }, {}) -
Appelle le point de terminaison de jeton du locataire pour demander un jeton d'accès en utilisant le flux d'octroi Bearer JWT OAuth 2.0.
- context: > roauth := hc.Post("https://" + ctx.__tenantid + "/oidc/endpoint/default/token", {"content-type": "application/x-www-form-urlencoded"}, jsonToFormURLEncoded({ "client_id": ctx.client_id, "client_secret": has(ctx.client_secret) ? ctx.client_secret : "", "assertion": context.userJWT, "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer" }, true)) -
Génère l' URL pour rediriger le navigateur et créer la session de connexion.
- return: > { "result": "true", "loginURL": "https://" + ctx.__tenantid + "/v1.0/auth/session?access_token=" + context.roauth.responseBody.access_token + "&redirect_url=" + (has(ctx.Target) ? ctx.Target : "https://" + ctx.__tenantid + "/usc") }
Une fois cette tâche fonctionnelle exécutée, le contexte de flux possède deux propriétés supplémentaires :
- le résultat : Indique si le jeton a été généré avec succès
- loginURL: Il s'agit du point de terminaison de la session vers lequel le navigateur doit être redirigé pour créer une session d'authentification unique authentifiée par l'utilisateur.
L'enveloppe
Ce flux permet à un utilisateur de s'authentifier en fournissant simplement un nom d'utilisateur valide. Il a présenté les concepts clés nécessaires à la mise en place d'un processus d'authentification via des API ou des méthodes d'authentification non natives. Il n'est pas prévu de le déployer dans un environnement de production réel, étant donné la possibilité évidente d'exposition, et le lecteur doit faire preuve d'une prudence adéquate, comme indiqué tout au long du guide.
Vivek Shankar, IBM Sécurité💎 Darshita Kumar, IBM Sécurité
Updated 18 days ago
