Pages de connexion derrière un CDN, sur le même domaine
Sur cette page
Un CDN peut servir les pages de connexion (/auth/) et l’espace compte (/account/) au plus près des utilisateurs sans rien changer dans TOSIAM. Le CDN se place devant TOSIAM, sur la même adresse : le navigateur ne voit qu’un seul domaine, celui du service.
Le principe#
Le nom public de TOSIAM, par exemple sso.example.com, ne pointe plus vers votre équilibreur de charge mais vers le CDN, par un enregistrement DNS CNAME. Le navigateur parle donc toujours au CDN, qui :
- répond lui-même aux fichiers statiques qu’il a en cache : scripts, feuilles de style, polices, images ;
- transmet tout le reste à TOSIAM : les pages d’entrée, les appels à l’API (
/json/...), OAuth2, SAML, et la réponse revient par le même chemin.
navigateur
│ https://sso.example.com (le nom pointe vers le CDN)
▼
CDN ──► scripts, styles, polices, images : réponse depuis son cache
│ tout le reste
▼
équilibreur de charge ──► serveurs TOSIAMComme l’adresse ne change pas :
- il n’y a pas de CORS à régler, ni sur TOSIAM ni sur le CDN ;
- le cookie de session reste sur le domaine du service, comme sans CDN ;
- les redirections (
goto,redirect_uri) gardent la même adresse.
Pour TOSIAM, le CDN est un équilibreur de charge de plus. L’URL du site (voir Scalabilité & haute disponibilité) reste le nom public, https://sso.example.com.
Ce que le CDN garde en cache#
TOSIAM indique lui-même ce qui peut être gardé, avec l’en-tête Cache-Control :
| Adresse | Cache-Control envoyé par TOSIAM | Ce que fait le CDN |
|---|---|---|
/tosiam/auth/ et /tosiam/account/ (pages d’entrée, index.html) | no-cache,no-store | transmet à chaque fois |
/tosiam/auth/themes/* (themes.json, thèmes des royaumes) | no-cache,no-store | transmet à chaque fois |
/tosiam/auth/resourceHashes.json | no-cache,no-store | transmet à chaque fois |
Les autres fichiers de /tosiam/auth/ et /tosiam/account/ : scripts, feuilles de style, polices, images | aucun | garde en cache, selon ses règles |
/tosiam/json/*, /tosiam/oauth2/* et le reste | réponses de l’API | transmet à chaque fois |
Les noms des scripts, des feuilles de style et des polices contiennent une empreinte (main.2ad554b4cf1b60b0861b.js). Un fichier qui change change aussi de nom : le CDN peut donc les garder longtemps, un an par exemple. Après une mise à jour de TOSIAM, la nouvelle page d’entrée demande les nouveaux noms, et il n’y a rien à purger.
Les pages d’entrée et les thèmes des royaumes ne sont jamais mis en cache : un thème modifié dans themes.json s’applique tout de suite, même derrière le CDN.
Mettre en place#
1. Déclarer TOSIAM comme origine du CDN#
Dans la console du CDN, créez une propriété pour sso.example.com dont l’origine est votre équilibreur de charge (ou votre serveur TOSIAM).
- Gardez l’en-tête
Hostd’origine,sso.example.com: TOSIAM construit ses redirections et vérifie les adresses à partir de ce nom. - Respectez les en-têtes
Cache-Controlde l’origine, au moins pour les adresses enno-cache,no-storedu tableau ci-dessus. - Ne mettez pas en cache les réponses qui posent un cookie (
Set-Cookie), et transmettez les cookies à l’origine. - Optionnel : une règle « un an » sur
/tosiam/auth/*et/tosiam/account/*, en excluant les adresses du tableau qui sont enno-cache,no-store.
2. Installer le certificat du nom public#
Le navigateur ouvre la connexion TLS avec le CDN : c’est lui qui présente le certificat de sso.example.com. La plupart des CDN le fournissent ou acceptent le vôtre.
3. Faire pointer le nom vers le CDN#
Remplacez l’enregistrement DNS de sso.example.com par le CNAME que donne le CDN :
sso.example.com. 300 IN CNAME sso.example.com.cdn-fournisseur.net.Vérifiez avec dig :
dig +short sso.example.comLa réponse montre le nom du CDN, puis ses adresses.
4. Garder l’adresse réelle des utilisateurs#
Derrière le CDN, TOSIAM voit l’adresse du CDN, pas celle de l’utilisateur. Le CDN ajoute l’adresse de l’utilisateur dans un en-tête, X-Forwarded-For ou un en-tête qui lui est propre. Donnez le nom de cet en-tête dans la propriété avancée com.sun.identity.authentication.client.ipAddressHeader des valeurs par défaut des serveurs. Les journaux d’audit et l’authentification utilisent alors la bonne adresse.
Vérifier#
Ouvrez https://sso.example.com/tosiam/auth/, puis l’onglet Réseau des outils de développement du navigateur :
- toutes les requêtes ont la même adresse,
sso.example.com; - les scripts, les feuilles de style et les polices viennent du cache du CDN ;
- la page d’entrée,
themes.jsonet les appels/json/...vont jusqu’à TOSIAM.
Le CDN indique dans un en-tête de réponse si la réponse vient de son cache. Le nom de l’en-tête dépend du CDN, par exemple :
Server-Timing: cdn-cache; desc=HIT(ouMISS), visible dans l’onglet Timing de la requête, partie Server Timing ;CF-Cache-Status: HIT;X-Cache: Hit from cloudfront.
Limites#
- Le CDN ne change rien à la charge des appels à l’API : chaque étape de connexion va jusqu’à TOSIAM.
- Les fichiers de
/tosiam/auth/et/tosiam/account/n’ont pas d’en-têteCache-Control: la durée de cache vient des règles du CDN.
Mis à jour le