<liclass="level2"><divclass="li"><ahref="#authentication_and_userdb">Authentification et base d'utilisateurs</a></div></li>
<liclass="level2"><divclass="li"><ahref="#register_llng_to_an_openid_connect_provider">Enregistrer LL::NG dans un fournisseur d'identité OpenID-Connect</a></div></li>
<liclass="level2"><divclass="li"><ahref="#declare_the_openid_connect_provider_in_llng">Déclarer le fournisseur OpenID Connect dans LL::NG</a></div>
<divclass="noteclassic">OpenID Connect est un protocole basé sur les piles REST, OAuth 2.0 et JOSE. Il est décrit ici : <ahref="http://openid.net/connect/"class="urlextern"title="http://openid.net/connect/"rel="nofollow">http://openid.net/connect/</a>.
</div>
<p>
<abbrtitle="LemonLDAP::NG">LL::NG</abbr> peut agir comme un client OpenID-Connect (« Relying Party » RP), ce qui permet de fédérer <a1>LL::NG</a1> avec : L'identité utilisateur sera récupérée via in jeton d'identification, et les attributs utilisateurs via le point d'accès UserInfo.
</p>
<p>
Comme RP, <abbrtitle="LemonLDAP::NG">LL::NG</abbr> supporte de nombreuses fonctionnalités OpenID-Connect :
</p>
<ul>
<liclass="level1"><divclass="li"> Débit de code d'autorisation</div>
</li>
<liclass="level1"><divclass="li"> Téléchargement automatique de JWKS</div>
</li>
<liclass="level1"><divclass="li"> Vérification de signature JWT</div>
</li>
<liclass="level1"><divclass="li"> Vérification de hashage des jetons d'accès</div>
</li>
<liclass="level1"><divclass="li"> Validation de jeton d'identité</div>
</li>
<liclass="level1"><divclass="li"> Récupérer UserInfo au format JSON ou JWT</div>
</li>
<liclass="level1"><divclass="li"> Déconnexion via point d'accès EndSession</div>
</li>
</ul>
<p>
On peut utiliser ce module d'authentification pour lier un serveur <abbrtitle="LemonLDAP::NG">LL::NG</abbr> à n'importe quel fournisseur OpenID-Connect. Quelques exemples, avec leur documentation :
<divclass="noteimportant">OpenID-Connect specification isn't finished for logout propagation. So logout initiated by relaying-party will be forward to OpenID-Connect provider but logout initiated by the provider (or another RP) will not be propagated. LLNG will implement this when <abbrtitle="spécification">spec</abbr> will be published.
Voir le chapître de configuration du <ahref="openidconnectservice.html"class="wikilink1"title="documentation:2.0:openidconnectservice">service OpenID-Connect</a>.
<divclass="notetip">Comme les mots-de-passe ne sernt pas gérés par <abbrtitle="LemonLDAP::NG">LL::NG</abbr>, il est possile de désactiver le <ahref="portalmenu.html#menu_modules"class="wikilink1"title="documentation:2.0:portalmenu">module mots-de-passe du menu</a>.
</div>
<p>
Ensuite dans <code>Paramètres généraux</code>><code>Paramètres d'authentification</code>><code>Paramètres OpenID-Connect </code>, on peut indiquer :
</p>
<ul>
<liclass="level1"><divclass="li"><strong>Niveau d'authentification</strong> : niveau d'authentification associé à ce module</div>
</li>
<liclass="level1"><divclass="li"><strong>Paramètres GET de rappel</strong> : nom du paramètre GET utilisé pour intercepter le rappel (défaut: openidconnectcallback)</div>
<liclass="level1"><divclass="li"><strong>State session timeout</strong>: duration of a state session (used to keep state information between authentication request and authentication response) in seconds (default: 600)</div>
<h3class="sectionedit8"id="register_llng_to_an_openid_connect_provider">Enregistrer LL::NG dans un fournisseur d'identité OpenID-Connect</h3>
<divclass="level3">
<p>
Pour enregistrer <abbrtitle="LemonLDAP::NG">LL::NG</abbr>, il faut renseigner quelques informations telles le nom d'application ou le logo. Une des informations exigées est l'<abbrtitle="Uniform Resource Locator">URL</abbr> de redirection (une ou plusieurs).
</p>
<p>
Pour connaître cette information, prendre simplement l'<abbrtitle="Uniform Resource Locator">URL</abbr> et le paramètre GET de rappel, par exemple :
<divclass="noteimportant">Si le <ahref="authchoice.html"class="wikilink1"title="documentation:2.0:authchoice">backend choix</a> est utilisé, il faut ajouter le paramètre choix dans l'<abbrtitle="Uniform Resource Locator">URL</abbr> de redirection
</div>
<p>
Après enregistrement, l'OP doit donner un identifiant et un secret clients, qui seront utilisé pour configurer l'OP dans <abbrtitle="LemonLDAP::NG">LL::NG</abbr>.
<h3class="sectionedit9"id="declare_the_openid_connect_provider_in_llng">Déclarer le fournisseur OpenID Connect dans LL::NG</h3>
<divclass="level3">
<p>
Dans le manager, choisir <code>Fournisseurs OpenID-Connect</code> et cliquer sur <code>Ajouter un fournisseur OpenID-Connect</code>. Donner un nom technique (sans espaces ni caratères speciaux), tel “sample-op” ;
</p>
<p>
On peut ensuite accéder à la configuration de cet OP.
</p>
</div>
<h4id="metadata">Métadonnée</h4>
<divclass="level4">
<p>
L'OP peut publier sa métadonnée dans un fichier JSON (voir par exemple la <ahref="https://accounts.google.com/.well-known/openid-configuration"class="urlextern"title="https://accounts.google.com/.well-known/openid-configuration"rel="nofollow">métadonnée Google</a>). Copier le contenu de ce fichie dans l'emplacement dédié.
</p>
<p>
À défaut de métadonnée, il faut les écrire. Les champs obligatoires sont :
JWKS est un fichier JSON contenant des clefs publiques. <abbrtitle="LemonLDAP::NG">LL::NG</abbr> peut les récupérer autoatiquement si jwks_uri est défini dans la métadonnée. Sinon copier le contenu du fichier JSON dans l'emplacement dédié.
</p>
<divclass="notetip">Si le fournisseur OpenID-Connect n'utilise qu'une clef symétrique de chiffrement, la donnée JWKS n'est pas nécessaire.
Définir ici la correspondance entre le contenu de la sessions <abbrtitle="LemonLDAP::NG">LL::NG</abbr> et les champs fournis dans la réponse UserInfo. Les champs sont définis dans le <ahref="http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims"class="urlextern"title="http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims"rel="nofollow">standard OpenID-Connect</a>, et dépendent de la portée requise par <abbrtitle="LemonLDAP::NG">LL::NG</abbr> (voir les options dans le prochain chapitre).
<liclass="level2"><divclass="li"><strong>Configuration endpoint</strong>: <abbrtitle="Uniform Resource Locator">URL</abbr> de point d'accès de configuration de l'OP</div>
</li>
<liclass="level2"><divclass="li"><strong>Durée de vie de la donnée JWKS</strong> : au delà de ce délai, <abbrtitle="LemonLDAP::NG">LL::NG</abbr> effectuera une requête pour rafraîchir la donnée JWKS. Mettre à 0 pour désactiver.</div>
</li>
<liclass="level2"><divclass="li"><strong>Identifiant client</strong> : identifiant client donné par l'OP</div>
</li>
<liclass="level2"><divclass="li"><strong>Secret client</strong> : secret client donné par l'OP</div>
<liclass="level2"><divclass="li"><strong>Store ID token</strong>: Allows one to store the ID token (JWT) inside user session. Don't enable it unless you need to replay this token on an application, or if you need the id_token_hint parameter when using logout.</div>
<liclass="level2"><divclass="li"><strong>Portée</strong> : valeur du paramètre de portée (exemple : profil openid). La portée <code>openid</code> est exigée.</div>
</li>
<liclass="level2"><divclass="li"><strong>Affichage</strong> : valeur du paramètre d'affichage (exemple : page)</div>
</li>
<liclass="level2"><divclass="li"><strong>Prompt</strong> : valeur du paramètre prompt (exemple : consent)</div>
</li>
<liclass="level2"><divclass="li"><strong>Âge max</strong> : valeur du paramètre max_age (exemple : 3600)</div>
</li>
<liclass="level2"><divclass="li"><strong>UI locales</strong> : valeur du paramètre ui_locales (exemple : en-<abbrtitle="Gigaoctet">GB</abbr> en fr-FR fr)</div>
</li>
<liclass="level2"><divclass="li"><strong>Valeurs ACR</strong> : valeur des paramètres acr_values (exemple : loa-1)</div>
</li>
<liclass="level2"><divclass="li"><strong>Méthode d'authentification du point d'accès du jeton</strong> : choisir entre <code>client_secret_post</code> et <code>client_secret_basic</code></div>
</li>
<liclass="level2"><divclass="li"><strong>Vérifier la signature JWT</strong> : mettre à 0 pour désactiver la signature JWT</div>
</li>
<liclass="level2"><divclass="li"><strong>Durée de vie max des jetons</strong> : si défini, <abbrtitle="LemonLDAP::NG">LL::NG</abbr> examinera la date du jeton d'identification et refusera les jetons trop anciens</div>
</li>
<liclass="level2"><divclass="li"><strong>Utiliser Nonce</strong> : si activé, un nonce sera envoyé, et vérifié depuis le jeton d'identité</div>