Authentification eIDAS pour MITRE OpenID Serveur

Dans un précédent blog je prévoyais de faire l'authentification d'un client OpenID Connect sur un Identity Provider (IdP) eIDAS.

Cette mise en oeuvre est le mariage de trois protocoles SAML, eIDAS et OpenID Connect.
Rappelons le cas d'usage: un européen disposant d'une identité numérique publique dans son pays d'origine souhaite utiliser un service Français protégé par OpenID Connect (peut être FranceConnect ;-).
La cinématique est la suivante:
  • Le site Français (Client) demande une authentification à un serveur (AS) connu de lui
  • Le serveur d'autorisation (AS) Français propose à l'européen de choisir son pays d'origine
  • Le serveur AS Français forge une demande d'authentification en tant que Service Provider (SP) eIDAS
  • L'IdP du pays d'origine valide la demande et authentifie l'utilisateur
  • L'IdP obtient le consentement de l'utilisateur pour le transfert d'information
  • L'IdP retourne la réponse positive au SP Français
  • Le SP valide la réponse et donne les autorisations nécessaires
  • Le serveur d'autorisation  (AS) valide la demande d'accès et retourne un jeton d'accès au Client
  • L'utilisateur européen donne son consentement au Client
  • Le client demande une autorisation d'accès aux données de l'utilisateur
Pour faire la démonstration de ce cas d'usage j'ai utilisé le serveur OpenID du MIT et son application cliente (Java c'est bien). J'ai du bataillé avec le code (Spring Security v3) pour mettre au point une authentification basée sur SAML v2 (ou presque c'est le client eIDAS ;-). Et finalement j'ai obtenu l'implémentation suivante:

Tout commence sur l'application cliente
Cette étape ne sera pas visible de l'utilisateur, c'est le client qui va faire sa demande d'autorisation au serveur OpenID, dans le champ taper: http://openidsrv.spopoff.com:8080/openid-connect-server-webapp/

Le serveur demande l'authentification de l'utilisateur et lui propose une page, en fait dans mon cas deux, car je n'ai pas complètement modifié l'authentification de base du serveur MITRE. Sur la première cliquer sur le lien en bas, puis dans le formulaire suivant choisir CB (Country B).
Je sais c'est assez moche ;-). Les deux informations sont le nœud eIDAS (Eidas Node) qui va traiter la demande et la faire voyager en Europe, ce nœud représente la France dans le réseau des états membre. La deuxième (Return URL), la servlet qui va recevoir la réponse du nœud Français. C'est cette dernière qui fera le pont entre eIDAS SAML et OpenId Connect. Faites RUN et c'est parti pour le tour de l'Europe (CC -> CB --> CC).

Je passe la phase d'authentification et de consentement que vous trouverez ici, attention toute fois à mettre le niveau substantiel comme niveau d'authentification (c'est une exigence du Client).
De retour sur le serveur OpenID on valide le consentement donné au client pour accéder a vos données, ce ne sera que la troisième fois que l'utilisateur consent. Ne pas tenir compte de l'alerte, qui peut être dans votre cas ne s'affichera pas.
Finalement nous sommes de retour sur l'application Cliente, avec un affichage des données techniques issue de l'authentification. On notera que l'attribut sub contient l'identifiant unique du pays CB et qu'il est unique pour CC du fait de la concaténation CB+CC (pas d'identifiant unique Européen).  La confiance dans cet identifiant et les données afférentes dépendra du niveaux de garantie des schémas d’identification électronique (faible / substantiel / élevé).
Cette mise en oeuvre termine les travaux annoncés dans FranceConnect et eIDAS. Je rappelle que toutes ces travaux n'engage que moi et sont purs spéculations.

@sam280  ai-je bien lu les spécifications ?

Stéphane POPOFF© février 2016 sous licence Cecill v2

Comments