AuthSessionExpired - Session expirée

Spécification design de l’écran login-page-expired.ftl Keycloak.

Contexte d’usage

Affiché quand l’usager tente une action après expiration de sa session Keycloak (timeout d’inactivité, jeton invalidé côté serveur, etc.). Pas de formulaire - juste une information et deux options : se reconnecter ou poursuivre avec un nouveau token.

Rendu visuel

Session expirée

Votre session a expiré pour des raisons de sécurité. Veuillez vous reconnecter pour continuer.

Code HTML pour login-page-expired.ftl

<div class="pf-auth-page">
  <div class="ori-card ori-card--elevated pf-auth-card">
    <div class="ori-card__body pf-auth-body">
      <div class="pf-auth-brand">
        <span class="ori-logo">
          <img src="${url.resourcesPath}/img/logo-pf.svg" alt="" class="ori-logo__crest" />
          <span class="ori-logo__text">
            <span class="ori-logo__title">Polynésie française</span>
            <span class="ori-logo__subtitle">${realm.displayName!''}</span>
          </span>
        </span>
      </div>

      <div class="pf-auth-intro">
        <h1 class="pf-auth-title">${msg("pageExpiredTitle")}</h1>
        <p class="pf-auth-description">${msg("pageExpiredMsg")}</p>
      </div>

      <div class="pf-auth-actions">
        <a href="${url.loginRestartFlowUrl}" class="ori-btn ori-btn--primary ori-btn--block">${msg("doClickHere")}</a>
        <a href="${url.loginAction}" class="ori-btn ori-btn--secondary ori-btn--block">${msg("doContinue")}</a>
      </div>
    </div>
  </div>
</div>

CSS d’accompagnement

.pf-auth-actions {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

Spécification fonctionnelle

Libellés

pageExpiredTitle=Session expirée
pageExpiredMsg=Votre session a expiré pour des raisons de sécurité. Veuillez vous reconnecter pour continuer.
doClickHere=Se reconnecter
doContinue=Reprendre où je m'étais arrêté

Comportement des boutons

  • Se reconnecter (url.loginRestartFlowUrl) : redémarre le flow d’auth complet. À utiliser dans la majorité des cas - notamment si l’usager a perdu son contexte applicatif.
  • Reprendre où je m’étais arrêté (url.loginAction) : tente de poursuivre le flow là où il était. Utile si Keycloak a juste besoin d’un nouveau token sans renvoyer l’usager au début.

Le second bouton n’est pas toujours pertinent (selon le flow_id Keycloak). Si l’app n’a jamais besoin de ce cas, le retirer du template et garder uniquement le bouton “Se reconnecter”.

Accessibilité

  • <a class="ori-btn"> (pas <button>) car ce sont des liens de navigation vers d’autres URL, pas des actions de formulaire
  • Le titre <h1> permet aux lecteurs d’écran d’annoncer la nature de la page lors de la navigation