Pré-requis
|
Ce document propose un démarche d'intégration SSO (Single Sign-On) d’une application tiers en s’appuyant sur le protocole OAuth 2.0
La plateforme Édifice propose un serveur OAuth2 qui supporte les "flots" suivant :
Authorization Code : https://oauth.net/2/grant-types/authorization-code/
Resource Owner Passwword : https://oauth.net/2/grant-types/password/
Client Credential :https://oauth.net/2/grant-types/client-credentials/
Jwt bearer : https://datatracker.ietf.org/doc/html/rfc7523
Le flot Authorization Code est le plus couramment utilisé |
Si vous êtes un éditeur ou un exploitant d’application, demandez au Support Édifice d’enregistrer votre application |
Depuis la console d(administration d’une plateforme Édifice créer un connecteur de type OAuth2
Champs à configurer :
"Identitifiant" (clientId oAuth2)
"URL" (URL de service cible)
"Transmettre la session" (configure automatiquement le scope userinfo)
"Scope" (autorisations d'accès aux données utilisateurs de l'application externe)
"Mode d'identification" (utiliser "code" pour une application web et "password" pour une application mobile)
Code secret" (secret oAuth2).
Informations à transmettre à l'éditeur de l'application cliente :
l'URL du récupération du code temporaire : https://domaine.ent/auth/oauth2/code
l'URL du récupération du token : https://domaine.ent/auth/oauth2/token
l'URL du récupération des information utilisateur : https://domaine.ent/auth/oauth2/userinfo
le clientId (champs "Identifiant")
le secret (champs "Code Secret")
le scope (champs "Scope")
Informations à récupérer de l'éditeur de l'application cliente
URL de service ( à renseigner dans le champs "URL")
Voici la procédure de test, une fois le paramétrage réalisé, il consiste à simuler l'ensemble des requêtes nécessaire à l'obtention des données de l'usager connecté.
Dans un navigateur, entrer l'adresse :
|
Si l'utilisateur n'est pas connecté alors la plateforme Édifice redirige le navigateur vers la mire connexion
Si l'utilisateur est connecté alors la plateforme Édifice le redirige vers l'URL de service avec le code en paramètre :
|
|
Il faut authentifier en Basic le client OAuth2. Donc il passer une entête d’authentification qui respecte la convention suivante "Authorization:Basic encode_base64(client_id:client_secret)". |
En cas de succes le serveur oAuth2 de l'ENT transmet le token
|
Dans cet exemple nous collectons des informations d’identités de l’utilisateurs sur le endpoints /userinfo
|
Dans l'en-tête "Authorization:Bearer " il faut passer le token |
En cas de succès le serveur OAuth2 de l'ENT transmet la ressource de l’utilisateur demandée
|
|
En cas de succes le serveur oAuth2 de l'ENT transmet le token
|
Dans cet exemple nous collectons des informations d’identités de l’utilisateurs sur le endpoints /userinfo
|
Dans l'en-tête "Authorization:Bearer " il faut passer le token |
En cas de succes le serveur OAuth2 de l'ENT transmet la ressource de l’utilisateur démandée
|
Via les informations du JWT il est possible d’obtenir les informations authentification :
Documentation officielle : https://datatracker.ietf.org/doc/html/rfc7523
|
1 - Informations à récupérer de l'éditeur de l'application cliente : ( Supplémentaire )
URL du certificat ( à renseigner dans le champs "URL du certificat")
2 - Une fois la configuration dans la console administrateur : Récupération du token
curl --location --request POST 'https://domaine.ent/auth/oauth2/token' \ --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' \ --data-urlencode 'redirect_uri=https://www.duckduckgo.com' \ --data-urlencode 'client_id={YOUR_CLIENT_ID}' \ --data-urlencode 'client_secret={YOUR_SECRET}' \ --data-urlencode 'assertion={YOUR_JSON_WEB_TOKEN}' \ --data-urlencode 'scope={SCOPE}' |
3 - En cas de succes le serveur OAuth2 de l'ENT transmet l’Access Token
{ "token_type": "Bearer", "access_token": "5459a598-72f0-482c-b54a-fd44e92af5da", "expires_in": 3600, "scope": "email userinfo" } |