Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Info

Pré-requis

Info
  • Être familier des notions de Single Sign-On (SSO) et plus particulièrement oAuth2OAuth2

  • Connaitre les bases du protocoles HTTP (query parameter, GET / POST, en-têtes)

  • Savoir utiliser un client HTTP tel que cURL ou un plugin navigateur équivalent 

Démarche

Ce document propose un démarche d'intégration de service tiers en tant que client SSO (Single Sign-On)

Notre choix se porte sur l'utilisation d'oAuth2 qui simplifie entres autres la propagation d'attributs et la compatibilité avec les applications mobiles.

ODE framework dispose d'un serveur oAuth2 qui supportent d’une application tiers en s’appuyant sur le protocole OAuth 2.0 

1 - Choisir un flot d’authentification OAuth2

La plateforme Édifice propose un serveur OAuth2 qui supporte les "flots" suivant :

  • support du flot "Authorisation Code" (authentification d'une application web) 

    • support du flot "Resource Owner Passwword" (authentification d'une application mobile de confiance)

    • support du flot "Client Credential"

    • propagation d'attribut par API REST protégée par un jeton (en-tête : bearer)

Remarque

Nous recommandons fortement d'alimenter en données utilisateurs l'application cliente au fil de l'eau plutôt que par export en masse. En d'autres termes, nous préconisons une création/mise à jour des comptes utilisateurs/ou méta données afférentes à chaque connexion (fil de l'eau).

1 : Choisir le ou les attributs d'authentification

...

Bloc de code
{
    "level":"",
    "lastName":"ALEXANDRE",
    "firstName":"SEVERINE",
    "externalId":"5555959",
    "type":"ENSEIGNANT",
    "childrenIds":[],
    "uai":["0805432C"],
    "userId":"2bacdfd2-b59c-4b21-a23e-f6346e02fc4a",
    "classId":"55567$3ARMS",
    "schoolName":"Collège Denis Poisson"
}
Remarque

Les attributs demandés par l'application cliente doivent être validés au niveau du projet

2 : Configurer dans l'ENT

...

Info

Le flot Authorization Code est le plus couramment utilisé

2 - Enregistrer l’application cliente sur la plateforme Édifice

Remarque

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).

...

  • URL de service ( à renseigner dans le champs "URL")

3 :

...

Tester l’accès Oauth2 de votre application client

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é.

Authorization Code

1 : Récupérer code de génération du token 

Dans un navigateur, entrer l'adresse : 

...

  • Si l'utilisateur n'est pas connecté alors l'ENT la plateforme Édifice redirige le navigateur vers la mire connexion

  • Si l'utilisateur est connecté alors l'ENT la plateforme Édifice le redirige vers l'URL de service avec le code en paramètre : 

Bloc de code
https://www.duckduckgo.com/?code=9ddf3256-7e5d-4708-a121-dfbe5f6dba75&state=blip

2 - Récupérer le token

...

Bloc de code
 curl -i -X POST -H "Authorization:Basic ZmFxMnNjaWVuY2VzOmZhcTJzY2llbmNlcy1zZWNyZXQ=" -H "Content-Type:application/x-www-form-urlencoded" -H "Accept:application/json; charset=UTF-8" -d "grant_type=authorization_code&code=9ddf3256-7e5d-4708-a121-dfbe5f6dba75&redirect_uri=http%3A%2F%2Fduckduckgo.com" https://domaine.ent/auth/oauth2/token

...

Bloc de code
HTTP/1.1 200 OK
      Content-Type: application/json

      {"token_type":"Bearer","access_token":"1413b31c-b240-453a-bc1e-3773cd31adc9","refresh_token":"9e746d64-3fa8-4ff8-88b3-2d8314f56179","expires_in":3600,"scope":"userinfo"}

3 :

...

Accéder à une ressource de l’utilisateur depuis l’application cliente

Dans cet exemple nous collectons des informations d’identités de l’utilisateurs sur le endpoints /userinfo

Bloc de code
curl ­-i ­-H "Authorization:Bearer 7acb83b1­53bd­4105­9b46­5acfb095158f" https://domaine.ent/auth/oauth2/userinfo 
Remarque

Dans l'en-tête "Authorization:Bearer " il faut passer le token

En cas de succes le serveur oAuth2 OAuth2 de l'ENT transmet le tokenla ressource de l’utilisateur demandée

Bloc de code
HTTP/1.1 200 OK
Content-Type: application/json

{
    "level":"",
    "login":"severine.alexandre",
    "lastName":"ALEXANDRE",
    "firstName":"SEVERINE",
    "externalId":"5555959",
    "username":"SEVERINE ALEXANDRE",
    "type":"ENSEIGNANT",
    "childrenIds":[],
    "uai":["0805432C"],
    "userId":"2bacdfd2-b59c-4b21-a23e-f6346e02fc4a",
    "classId":"55567$3ARMS",
    "schoolName":"Collège Denis Poisson"
}

Précision sur le formats

...

"uai": Tableau des UAI (anciennement  nommés RNE) des établissements auxquels appartient l'utilisateur

...

Resource Owner Passwword

1 - Récupérer le token

Bloc de code
curl --location --globoff 'https://domaine.ent/auth/oauth2/token' \
    --data-urlencode 'grant_type=password' \
    --data-urlencode 'username={USERNAME}' \
    --data-urlencode 'password={PASSWORD}' \
    --data-urlencode 'scope={SCOPE}' \
    --data-urlencode 'client_id={CLIENT_ID}' \
    --data-urlencode 'client_secret={CLIENT_SECRET}'

En cas de succes le serveur oAuth2 de l'ENT transmet le token

Bloc de code
HTTP/1.1 200 OK
      Content-Type: application/json

      {"token_type":"Bearer","access_token":"1413b31c-b240-453a-bc1e-3773cd31adc9","refresh_token":"9e746d64-3fa8-4ff8-88b3-2d8314f56179","expires_in":3600,"scope":"userinfo"}

3 : Accéder à une ressource de l’utilisateur depuis l’application cliente

Dans cet exemple nous collectons des informations d’identités de l’utilisateurs sur le endpoints /userinfo

Bloc de code
curl ­-i ­-H "Authorization:Bearer 7acb83b1­53bd­4105­9b46­5acfb095158f" https://domaine.ent/auth/oauth2/userinfo 
Remarque

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

Bloc de code
HTTP/1.1 200 OK
Content-Type: application/json

{
    "level":"",
    "login":"severine.alexandre",
    "lastName":"ALEXANDRE",
    "firstName":"SEVERINE",
    "externalId":"5555959",
    "username":"SEVERINE ALEXANDRE",
    "type":"ENSEIGNANT",
    "childrenIds":[],
    "uai":["0805432C"],
    "userId":"2bacdfd2-b59c-4b21-a23e-f6346e02fc4a",
    "classId":"55567$3ARMS",
    "schoolName":"Collège Denis Poisson"
}