Échanger un jeton d'accès pour une session web
Introduction
OpenID Connect offre une multitude d'options pour l'authentification des utilisateurs et des appareils : des octroits de code d'autorisation normaux, aux informations d'identification client, au ROPC, et bien d'autres encore. Cependant, dans certains cas, vous êtes limité dans ce que vous pouvez faire une fois que vous vous êtes authentifié. Dans un flux d'octroi de code d'autorisation, votre session côté fournisseur d'identité peut avoir expiré mais vos jetons d'accès peuvent encore être valides. Dans un flux d'octroi ROPC, vous avez obtenu les droits d'interagir avec le fournisseur d'identité, mais vous n'avez jamais établi de session avec le navigateur donc si vous tentiez d'aller ailleurs, vous seriez malchanceux.
Dans ce scénario, nous utiliserons le flux d'octroi ROPC avec IBM Security Verify pour obtenir un jeton d'accès, puis faire un appel HTTP basé sur ajax avec ce jeton et obtenir une session authentifiée établie avec IBM Security Verify. Une fois la session établie, les utilisateurs sont capables de naviguer dans d'autres applications, à la fois SAML et OIDC, sans se réauthentifier directement avec le fournisseur d'identité.
Note : Pour le moment, le contournement CORS doit être activé via un plugin de navigateur. Je travaille sur une solution de contournement en ce moment.

Nouveau point de terminaison de session d'authentification
Dans IBM Security Verify, il y a un point de terminaison API qui permet aux cookies de session d'être définis lorsqu'appelé depuis un navigateur :
GET /v1.0/auth/session
Lors de l'appel à cette API, un jeton d'accès valide doit être fourni dans l'en-tête HTTP Authorization :
'Authorization: bearer {access_token}'
Une session web est créée pour l'utilisateur identifié par le jeton d'accès et un cookie pour maintenir cette session dans le navigateur est retourné.
Cette nouvelle API est assez simple à appeler en utilisant un appel ajax. Dans l'échantillon de code ci-dessous, j'ai créé une fonction JavaScript, fournissant le jeton d'accès que j'ai reçu, et lors d'une réponse réussie de l'appel API, j'envoie l'utilisateur au launchpad (qui est en soi une application OIDC) et on ne me demandera pas d'authentification supplémentaire (sauf si l'authentification multifacteur est requise par votre politique de sécurité).
Exemple de flux de connexion basé sur un formulaire
J'ai assemblé une application exemple, pas plus de 160 lignes de code HTML/JS. Cette application fait une chose, et une seule chose : connecte un utilisateur au launchpad depuis une application tierce.
Prérequis
Créer une nouvelle application OIDC pour ROPC
Créez une nouvelle application personnalisée dans IBM Security Verify et sélectionnez OpenID Connect comme type. Activez l'octroi Resource Owner Password Credential (ROPC), avec un ID client public, et pas de secret. Pour ce flux, le secret ne nous fait pas vraiment beaucoup de bien car c'est juste une application basée sur le front-end. Ce ne serait pas vraiment privé de toute façon car il n'y a pas vraiment de bonne option pour le cacher.
Ajouter votre domaine aux domaines autorisés dans IBM Security Verify
Cette application est un site tiers, donc vous devrez ajouter l'URL de votre serveur, que ce soit localhost ou un domaine pleinement qualifié, à vos Domaines Autorisés.
Dans le portail admin d'IBM Security Verify, naviguez vers l'onglet Configuration. Sous l'onglet Clients API, sélectionnez Domaines Autorisés. Ajoutez votre domaine, port, et tout ce qui est nécessaire pour permettre CORS. Dans ce cas, j'utilise python pour créer un serveur HTTP sur le port 8000. J'ai ajouté http://localhost:8000 à ma liste de domaines autorisés.
Code d'exemple
Updated 21 days ago