Compare commits

..

8 Commits

Author SHA1 Message Date
Jonathan Perret ca871058d5 🔧(helm) use bitnami Redis chart
The core.libre.sh Redis operator won't be available in the
OPICloud cluster in any case.
For now we only deploy a standalone Redis server.
2026-03-19 22:18:36 +01:00
Jonathan Perret f50e2b092d 🔧(helm) remove gunicorn worker timeout override
The default 30s timeout is appropriate and some SAML assertion
processing requests can take more than 10 seconds.
2026-03-18 18:49:54 +01:00
Jonathan Perret 2dbeff512c 🔧(helm) force SATOSA pods to run on Redis's node
For now it seems we're having trouble when the app pods are not sharing
a node with the Redis server.
2026-03-18 15:51:04 +01:00
Jonathan Perret ef911745a7 🔧(prod) set pod replicas to 8
Trying to see if more resources help. Also setting worker timeout to
10 seconds since PCF won't wait more than 6 seconds anyway.
2026-03-18 13:18:53 +01:00
Jonathan Perret 3a3a8d698d 🔧(prod) bump CPU request to 500m
We're seeing slowdowns in production.
2026-03-18 11:59:11 +01:00
Jonathan Perret 0374461ee0 🔧(prod) set pod replicas to 4
Also lowered memory back to 512MB.
2026-03-18 11:46:47 +01:00
Jonathan Perret ca51be8b10 🔧(helm) fix liveness probe typo
The targetPort in the liveness probe config was written "targetPost".
Note that the error had no effect since the chart falls back to the
service's target port.
2026-03-18 11:35:46 +01:00
Jonathan Perret b537e145c6 🔧(helm) bump pod memory limit to 1Gi
We're seeing out of memory errors in production.
2026-03-18 11:35:38 +01:00
31 changed files with 2038 additions and 409 deletions
-8
View File
@@ -123,14 +123,6 @@ jobs:
with:
submodules: recursive
token: ${{ steps.app-token.outputs.token }}
-
name: Install mkcert
run: |
apt-get update -y -q && apt-get install -y -q libnss3-tools
curl -Ss -L -o mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
chmod +x mkcert
mv mkcert /usr/local/bin/
TRUST_STORES=none mkcert -install
-
name: Helmfile lint
env:
-3
View File
@@ -6,9 +6,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.13] - 2026-03-26
- switch to stateless OIDC and remove Redis
## [1.0.12] - 2026-03-02
- upgrade dependencies: Python 3.14.3, gunicorn 25.1.0…
-32
View File
@@ -1,32 +0,0 @@
# oidc2fer -- Deploiement saillant.cc
Fork de [proconnect-gouv/oidc2fer](https://github.com/proconnect-gouv/oidc2fer) maintenu sur [electron-rare/oidc2fer](https://github.com/electron-rare/oidc2fer).
## Federation SAML Renater
- Entite SAML enregistree dans la **federation de test Renater**
- Metadata URL : https://pub.federation.renater.fr/metadata/test/idps.xml
## Clients OIDC configures
| Client | Usage |
|--------|-------|
| moodle-lms | Plateforme LMS Moodle |
| frappe-lms | Plateforme LMS Frappe |
## Container
- **Nom** : oidc2fer
- **Image** : oidc2fer-app (build local depuis le Dockerfile)
## Stack technique
- **SATOSA 8.5.1** -- proxy SAML-to-OIDC
- Bridge entre les IdP SAML de la federation Renater et les clients OIDC locaux
## Demarrage
```bash
cd /home/clems/oidc2fer
docker compose -f docker-compose.prod.yml up -d
```
-5
View File
@@ -13,11 +13,6 @@ docker_build(
]
)
docker_build(
'localhost:5001/oidc-test-client:latest',
context='docker/oidc-test-client'
)
watch_file('src/helm')
k8s_yaml(local('cd src/helm && helmfile -n oidc2fer -e dev template .'))
+1230
View File
File diff suppressed because it is too large Load Diff
+125
View File
@@ -0,0 +1,125 @@
https://idp1.agroparistech.fr/idp/shibboleth
https://idpv3.univ-amu.fr/idp/shibboleth
https://idp2.amue.fr/idp/shibboleth
https://idp.univ-avignon.fr/idp/shibboleth
https://idp.bnu.fr/idp/shibboleth
https://sso.bordeaux-inp.fr/idp/shibboleth
https://idp.enitab.fr/idp/shibboleth
https://idp2.brgm.fr/idp/shibboleth
https://auth.centrale-marseille.fr/idp/shibboleth
https://idp.ec-nantes.fr/idp/shibboleth
https://sso-ciation-saclay.centralesupelec.fr/idp/shibboleth
https://idp4.cereq.fr/idp/shibboleth
https://idp.cirad.fr/idp/shibboleth
https://janus.cnrs.fr/idp
https://identification.univ-toulouse.fr
https://idp.crous-reims.fr/idp/shibboleth
https://identites.ec-lyon.fr/idp/shibboleth
https://idp-ecole-air.renater.fr/idp/shibboleth
https://shibboleth03.chartes.psl.eu/idp/shibboleth
https://idp.enpc.fr/saml/metadata
https://idp.marseille.archi.fr/idp/shibboleth
https://idp.paris-malaquais.archi.fr/idp/shibboleth
https://idp.ensam.eu/idp/shibboleth
https://ident-shib.ensc-rennes.fr/idp/shibboleth
https://auth.sso.vet-alfort.fr/saml/metadata
https://federation.ens.psl.eu/idp/shibboleth
https://idp1.ens-paris-saclay.fr/idp/shibboleth
https://idp.ehesp.fr/idp/shibboleth
https://idp.ens-lyon.fr/idp/shibboleth
https://idp.ens-rennes.fr/idp/shibboleth
https://idp.rennes.archi.fr/idp/shibboleth
https://idp2.ensai.fr/idp/shibboleth
https://idp.lyon.archi.fr/idp/shibboleth
https://identites.ensea.fr/idp/shibboleth
https://idp.ensfea.fr/idp/shibboleth
https://idp.ensma.fr/idp/shibboleth
https://idp.esaip.org/idp/shibboleth
https://vip.espci.fr/saml2/idp/metadata.php
https://idp-genci.renater.fr/idp/shibboleth
https://idp.renater.fr/idp/shibboleth
https://shibboleth.grenoble-inp.fr/idp/shibboleth
https://idp.college-de-france.fr/idp/shibboleth
https://idp.imt-atlantique.fr/idp/shibboleth
https://shib.mines-albi.fr/idp/shibboleth
https://multipass.imt-nord-europe.fr/idp/shibboleth
https://idp.inalco.fr/idp/shibboleth
https://idp.inha.fr/idp/shibboleth
https://authentification.inrae.fr/saml/metadata/idp
https://prod-idp.inria.fr
https://idp-insa-cvl.renater.fr/idp/shibboleth
https://idauthproxy.insa-lyon.fr/Saml2IDP/metadata
https://idp.insa-rennes.fr/idp/shibboleth
https://shibboleth.insa-rouen.fr/idp/shibboleth
https://srv-fii.insa-toulouse.fr/idp/shibboleth
https://identities.univ-jfc.fr/idp/prod
https://sso.ird.fr/idp/shibboleth
https://idp.isae.fr/idp/shibboleth
https://idp.institut-agro.fr/idp
https://apps.univ-lr.fr/idp/shibboleth
https://idp.univ-lemans.fr/idp/shibboleth
https://idp2.emse.fr/idp/shibboleth
urn:mace:cru.fr:federation:univ-nantes.fr
https://federation.unimes.fr/idp/shibboleth
https://idp-septa.onisep.fr/idp/shibboleth
https://idp.oca.eu/idp/shibboleth
https://shibboleth3.obspm.fr/idp/shibboleth
https://access-check.renater.fr/simplesaml/saml2/idp/metadata.php
https://idp.sciencespobordeaux.fr/idp/shibboleth
https://idp.sciencespo-lyon.fr/idp/shibboleth
https://idp.sigma-clermont.fr/idp/shibboleth
https://shibboleth.ens2m.fr/idp/shibboleth
https://idp.inp-toulouse.fr/idp/shibboleth
https://shibboleth.ube.fr/idp/shibboleth
urn:mace:cru.fr:federation:univ-ubs.fr
urn:mace:cru.fr:federation:univ-lyon1.fr
https://idp.uca.fr/idp/shibboleth
https://idp.univ-cotedazur.fr/idp/shibboleth
urn:mace:cru.fr:federation:univ-angers.fr
https://idp.univ-artois.fr/idp/shibboleth
https://shibboleth.univ-evry.fr/idp/shibboleth
https://idp.univ-orleans.fr/idp/shibboleth
https://federation3.univ-brest.fr/idp/shibboleth
https://idp4.unicaen.fr/idp/shibboleth
https://shibboleth.univ-corse.fr/idp/shibboleth
https://idp.uha.fr/idp/shibboleth
https://shib2.unc.nc/idp/shibboleth
https://idp.univ-lille.fr/idp/shibboleth
urn:mace:cru.fr:federation:unilim.fr
https://idp3.univ-lorraine.fr/idp/shibboleth
https://idp.univ-lyon2.fr/idp/shibboleth
https://idp.univ-lyon3.fr/idp/shibboleth
https://federation.umontpellier.fr/idp/shibboleth
https://idp.univ-pau.fr/idp/shibboleth
https://idp.univ-perp.fr/idp/shibboleth
http://idp.univ-poitiers.fr
https://federation.upf.pf/idp/shibboleth
https://identite.univ-reims.fr/idp/shibboleth
urn:mace:cru.fr:federation:univ-rennes1.fr
urn:mace:cru.fr:federation:univ-rouen.fr
https://idp-ng.univ-st-etienne.fr/idp/shibboleth
https://idp.unistra.fr/idp/shibboleth
https://federation.utbm.fr/idp/shibboleth
https://shibboleth3.utt.fr/idp/shibboleth
https://idp.univ-tln.fr/idp/shibboleth
https://idp.univ-tlse3.fr/idp/shibboleth
https://idp.univ-tours.fr/idp/shibboleth
https://shibboleth.csi.uvsq.fr/idp/shibboleth
https://shibboleth.univ-grenoble-alpes.fr/idp/shibboleth
https://idp.univ-eiffel.fr/idp/shibboleth
https://shib.univ-lehavre.fr/idp/shibboleth
https://idp1.univ-fcomte.fr/idp/shibboleth
urn:mace:cru.fr:federation:univ-paris1.fr
https://idp2.univ-paris8.fr/idp/shibboleth
https://idp.ent.dauphine.fr/idp/shibboleth
https://upnidp2.parisnanterre.fr/idp/shibboleth
https://idp.universite-paris-saclay.fr/idp
https://idp-v4.univ-montp3.fr/idp/shibboleth
https://idp.uphf.fr/idp/shibboleth
urn:mace:cru.fr:federation:uhb.fr
https://shibboleth.univ-savoie.fr/idp/shibboleth
https://idp.univ-paris13.fr/idp/shibboleth
https://idp3.ut-capitole.fr/idp/shibboleth
https://ruhnu.univ-tlse2.fr/idp/shibboleth
https://auth.uttop.fr/saml/metadata
https://papangue.vetagro-sup.fr/idp/shibboleth
+367
View File
@@ -0,0 +1,367 @@
3sr-grenoble.fr
admin.in2p3.fr
agro-bordeaux.fr
agroparistech.fr
agrotoulouse.fr
alsace.cnrs.fr
amue.fr
apc.in2p3.fr
artsetmetiers.fr
artsetmetiers.ma
atilf.fr
biocampus.cnrs.fr
bis-sorbonne.fr
bnu.fr
bordeaux-inp.fr
brgm.fr
caes.cnrs.fr
caesug.cnrs.fr
cbs.cnrs.fr
cc.in2p3.fr
ccsd.cnrs.fr
cebc.cnrs.fr
cefas.cnrs.fr
cefe.cnrs.fr
cefrepa.cnrs.fr
ceipi.edu
cemes.fr
cemipai.cnrs.fr
cenbg.in2p3.fr
centrale-med.fr
centralesupelec.fr
centre-cired.fr
cepam.cnrs.fr
cercec.cnrs.fr
cerege.fr
cereq.fr
cermav.cnrs.fr
cfee.cnrs.fr
chartes.psl.eu
cirad.fr
cirfc.fr
cirm-math.fr
clermont-auvergne-inp.fr
clermont.in2p3.fr
cnrs-bellevue.fr
cnrs-dir.fr
cnrs-imn.fr
cnrs-mrs.fr
cnrs-orleans.fr
cnrs.cnrs.fr
cnrs.fr
college-de-france.fr
cppm.in2p3.fr
crbm.cnrs.fr
crhea.cnrs.fr
crous-reims.fr
crpp.cnrs.fr
csnsm.in2p3.fr
cso.cnrs.fr
dauphine.eu
dauphine.fr
dauphine.psl.eu
doctorant.upf.pf
dr1.cnrs.fr
dr11.cnrs.fr
dr12.cnrs.fr
dr13.cnrs.fr
dr14.cnrs.fr
dr15.cnrs.fr
dr17.cnrs.fr
dr18.cnrs.fr
dr2.cnrs.fr
dr4.cnrs.fr
dr5.cnrs.fr
dr6.cnrs.fr
dr7.cnrs.fr
dr8.cnrs.fr
dsi.cnrs.fr
dt.insu.cnrs.fr
ec-lyon.fr
ec-nantes.fr
eccorev.fr
ecole-air.fr
ecotron.cnrs.fr
edu.ehesp.fr
edu.univ-paris13.fr
edu.univ-spn.fr
ehesp.fr
em-strasbourg.fr
emse.fr
enit.fr
enitab.fr
enpc.fr
ens-lyon.fr
ens-paris-saclay.fr
ens-rennes.fr
ens.psl.eu
ens.univ-artois.fr
ensai.fr
ensam.eu
ensc-rennes.fr
ensea.fr
enseeiht.fr
ensfea.fr
ensiacet.fr
ensma.fr
epicur.education
esaip.org
eskemm-numerique.fr
espci.fr
espci.psl.eu
etu.emse.fr
etu.umontpellier.fr
etu.umpv.fr
etu.unicaen.fr
etu.univ-lorraine.fr
etu.univ-montp3.fr
etu.univ-orleans.fr
etu.univ-rouen.fr
etu.univ-st-etienne.fr
etud.univ-angers.fr
etud.univ-jfc.fr
etud.univ-pau.fr
etud.univ-tln.fr
etud.univ-ubs.fr
etudiant.univ-lr.fr
etudiant.univ-perp.fr
etudiant.univ-reims.fr
ext.esaip.org
ext.isae-supaero.fr
ext.univ-jfc.fr
fmnt.fr
fondation-lehn.fr
fpp.cnrs.fr
france-bioinformatique.fr
fsab.cnrs.fr
ganil.fr
gate.cnrs.fr
genci.fr
genopole.cnrs.fr
genopolys.fr
geoazur.unice.fr
gredeg.cnrs.fr
grenoble-inp.fr
grenoble-inp.org
grenoble.cnrs.fr
gsrl.cnrs.fr
huma-num.fr
iap.fr
ibcp.fr
ibgc.cnrs.fr
ibl.cnrs.fr
ibs.fr
icfrc.fr
icgm.fr
icmcb-bordeaux.cnrs.fr
icmcb.cnrs.fr
icmpe.cnrs.fr
icsn.cnrs-gif.fr
idemec.cnrs.fr
idris.fr
iemn.fr
ifpindia.org
ifporient.org
igf.cnrs.fr
igh.cnrs.fr
igmm.cnrs.fr
igs.cnrs-mrs.fr
ijclab.in2p3.fr
ijm.fr
iker.cnrs.fr
imbe.fr
imev-mer.fr
imft.fr
imm.cnrs.fr
imnc.in2p3.fr
imt-atlantique.fr
imt-nord-europe.fr
in2p3.fr
inalco.fr
inha.fr
inist.fr
inp-toulouse.fr
inphyni.cnrs.fr
inrae.fr
inria.fr
insa-cvl.fr
insa-lyon.fr
insa-rennes.fr
insa-rouen.fr
insa-toulouse.fr
inv.univ-rouen.fr
ip2i.in2p3.fr
ipbs.fr
iphc.cnrs.fr
ipht.fr
ipmc.cnrs.fr
ipnl.in2p3.fr
ipno.in2p3.fr
ipsl.fr
ipst-cnam.fr
ipst.fr
ird.fr
irht.cnrs.fr
irim.cnrs.fr
irisa.fr
isa-lyon.fr
isae-supaero.fr
isae.fr
isc.cnrs.fr
ish-lyon.cnrs.fr
isv.cnrs-gif.fr
iutbayonne.univ-pau.fr
l2it.in2p3.fr
laas.fr
laet.ish-lyon.cnrs.fr
laet.msh-lse.fr
lal.in2p3.fr
lam.fr
lapp.in2p3.fr
lapth.cnrs.fr
latmos.ipsl.fr
lcc-toulouse.fr
lcts.cnrs.fr
legi.cnrs.fr
legs.cnrs.fr
let.ish-lyon.cnrs.fr
lgp.cnrs.fr
lip6.fr
liris.cnrs.fr
lis-lab.fr
lisa.ipsl.fr
listes.imev-mer.fr
llr.in2p3.fr
lma.cnrs-mrs.fr
lma.in2p3.fr
lmd.ipsl.fr
lmf.cnrs.fr
lncmi.cnrs.fr
locean.ipsl.fr
loria.fr
lp2ib.in2p3.fr
lpccaen.in2p3.fr
lpmmc.cnrs.fr
lpnhe.in2p3.fr
lpsc.in2p3.fr
lsce.ipsl.fr
lspm.cnrs.fr
lupm.in2p3.fr
lyon.archi.fr
map.cnrs.fr
marseille.archi.fr
math.cnrs.fr
mgx.cnrs.fr
mines-albi.fr
mines-stetienne.fr
mio.osupytheas.fr
misha.cnrs.fr
misha.fr
mom.fr
mri.cnrs.fr
msh-lse.fr
neel.cnrs.fr
obs-besancon.fr
obspm.fr
oca.eu
omega.in2p3.fr
onisep.fr
osupytheas.fr
pantheonsorbonne.fr
parisgeo.cnrs.fr
parisnanterre.fr
placamat.cnrs.fr
prestataire.renater.fr
primato.cnrs.fr
prism.cnrs.fr
promes.cnrs.fr
renater.fr
rennes.archi.fr
risc.cnrs.fr
sb-roscoff.fr
sciencespo-aix.fr
sciencespo-lyon.fr
sciencespobordeaux.fr
scpobx.fr
seatech.fr
sete.cnrs.fr
sigma-clermont.fr
student.isae-supaero.fr
subatech.in2p3.fr
supagro.fr
supmicrotech.fr
sys2diag.cnrs.fr
toulouse-inp.fr
tyl.in2p3.fr
u-bourgogne.fr
u-strasbg.fr
ube.fr
uca.fr
uha.fr
umontpellier.fr
umpv.fr
unc.nc
unicaen.fr
unice.fr
unilim.fr
unimes.fr
unistra.fr
univ-amu.fr
univ-angers.fr
univ-artois.fr
univ-avignon.fr
univ-brest.fr
univ-corse.fr
univ-cotedazur.fr
univ-eiffel.fr
univ-evry.fr
univ-fcomte.fr
univ-grenoble-alpes.fr
univ-jfc.fr
univ-lehavre.fr
univ-lemans.fr
univ-lille.fr
univ-lorraine.fr
univ-lr.fr
univ-lyon1.fr
univ-lyon2.fr
univ-lyon3.fr
univ-montp3.fr
univ-nantes.fr
univ-nc.nc
univ-orleans.fr
univ-paris1.fr
univ-paris13.fr
univ-paris8.fr
univ-pau.fr
univ-perp.fr
univ-poitiers.fr
univ-reims.fr
univ-rennes.fr
univ-rennes2.fr
univ-rouen.fr
univ-savoie.fr
univ-smb.fr
univ-spn.fr
univ-st-etienne.fr
univ-tln.fr
univ-tlse2.fr
univ-tlse3.fr
univ-toulouse.fr
univ-tours.fr
univ-ubs.fr
universite-paris-saclay.fr
upf.pf
uphf.fr
usias.fr
ut-capitole.fr
utbm.fr
utinam.cnrs.fr
utt.fr
uttop.fr
uvsq.fr
vacataire.upf.pf
vet-alfort.fr
vetagro-sup.fr
vjf.cnrs.fr
xlim.fr
+6 -1
View File
@@ -14,7 +14,7 @@ services:
GUNICORN_CMD_ARGS: --workers=2
TEST_E2E: 1
#TEST_E2E_PC: 1
OIDC_DB_URI: stateless://:STATE-ENCRYPTION-KEY@localhost
OIDC_DB_URI: redis://redis/0
CLIENT_DB_JSON: |
{
"oidc-test-client": {
@@ -38,6 +38,8 @@ services:
volumes:
- ./src/satosa:/app
- ./docker/files/usr/local/etc/gunicorn/satosa.py:/usr/local/etc/gunicorn/satosa.py
depends_on:
- redis
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:8000/ping"]
interval: 60s
@@ -75,6 +77,9 @@ services:
extra_hosts:
- "oidc2fer.127.0.0.1.nip.io:host-gateway"
redis:
image: redis:7.2.4
nginx:
image: nginx:1.25
ports:
+6
View File
@@ -39,5 +39,11 @@ printenv SAML2_BACKEND_KEY > /tmp/backend.key
printenv OIDC_FRONTEND_KEY > /tmp/frontend.key
printenv CLIENT_DB_JSON > /tmp/client_db.json
# Redis database number must be specified
if [[ ! $OIDC_DB_URI =~ /[0-9]+$ ]]; then
echo "🐳(entrypoint) adding db id to OIDC_DB_URI"
export OIDC_DB_URI=$OIDC_DB_URI/0
fi
echo "🐳(entrypoint) running your command: ${*}"
exec "$@"
+1 -1
View File
@@ -1,4 +1,4 @@
FROM python:3.14.3-slim-trixie
FROM python:3.14
COPY . /app
+37
View File
@@ -0,0 +1,37 @@
agro-bordeaux.fr
centrale-med.fr
clermont-auvergne-inp.fr
college-de-france.fr
ecole-air.fr
edu.univ-paris13.fr
edu.univ-spn.fr
enitab.fr
enpc.fr
ens-rennes.fr
ens.univ-artois.fr
ensai.fr
esaip.org
eskemm-numerique.fr
ext.esaip.org
geoazur.unice.fr
inalco.fr
insa-cvl.fr
marseille.archi.fr
univ-artois.fr
obspm.fr
oca.eu
sigma-clermont.fr
unice.fr
univ-lyon1.fr
univ-paris13.fr
univ-spn.fr
uphf.fr
uvsq.fr
paris-malaquais.archi.fr
etud.univ-pau.fr
iutbayonne.univ-pau.fr
univ-pau.fr
cereq.fr
etud.univ-angers.fr
univ-angers.fr
+1
View File
@@ -0,0 +1 @@
paris-malaquais.archi.fr etud.univ-pau.fr iutbayonne.univ-pau.fr univ-pau.fr cereq.fr etud.univ-angers.fr univ-angers.fr
+162
View File
@@ -0,0 +1,162 @@
agroparistech.fr
agrotoulouse.fr
amue.fr
artsetmetiers.fr
artsetmetiers.ma
bis-sorbonne.fr
bnu.fr
bordeaux-inp.fr
brgm.fr
ceipi.edu
centralesupelec.fr
chartes.psl.eu
cirad.fr
cirfc.fr
cnrs-dir.fr
cnrs.fr
crous-reims.fr
dauphine.eu
dauphine.fr
dauphine.psl.eu
doctorant.upf.pf
ec-lyon.fr
ec-nantes.fr
edu.ehesp.fr
ehesp.fr
em-strasbourg.fr
emse.fr
enit.fr
ens-lyon.fr
ens-paris-saclay.fr
ens.psl.eu
ensam.eu
ensc-rennes.fr
ensea.fr
enseeiht.fr
ensfea.fr
ensiacet.fr
ensma.fr
epicur.education
espci.fr
espci.psl.eu
etu.emse.fr
etu.umontpellier.fr
etu.umpv.fr
etu.unicaen.fr
etu.univ-lorraine.fr
etu.univ-montp3.fr
etu.univ-orleans.fr
etu.univ-rouen.fr
etu.univ-st-etienne.fr
etud.univ-jfc.fr
etud.univ-tln.fr
etud.univ-ubs.fr
etudiant.univ-lr.fr
etudiant.univ-perp.fr
etudiant.univ-reims.fr
ext.isae-supaero.fr
ext.univ-jfc.fr
fondation-lehn.fr
genci.fr
grenoble-inp.fr
grenoble-inp.org
icfrc.fr
imft.fr
imt-atlantique.fr
imt-nord-europe.fr
inha.fr
inp-toulouse.fr
inrae.fr
inria.fr
insa-lyon.fr
insa-rennes.fr
insa-rouen.fr
insa-toulouse.fr
inv.univ-rouen.fr
ipst-cnam.fr
ipst.fr
ird.fr
irisa.fr
isae-supaero.fr
isae.fr
loria.fr
lyon.archi.fr
mines-albi.fr
mines-stetienne.fr
misha.fr
onisep.fr
pantheonsorbonne.fr
parisnanterre.fr
prestataire.renater.fr
renater.fr
rennes.archi.fr
sciencespo-aix.fr
sciencespo-lyon.fr
sciencespobordeaux.fr
scpobx.fr
seatech.fr
student.isae-supaero.fr
supagro.fr
supmicrotech.fr
toulouse-inp.fr
u-bourgogne.fr
u-strasbg.fr
ube.fr
uca.fr
uha.fr
umontpellier.fr
umpv.fr
unc.nc
unicaen.fr
unice.fr
unilim.fr
unimes.fr
unistra.fr
univ-amu.fr
univ-avignon.fr
univ-brest.fr
univ-corse.fr
univ-cotedazur.fr
univ-eiffel.fr
univ-evry.fr
univ-fcomte.fr
univ-grenoble-alpes.fr
univ-jfc.fr
univ-lehavre.fr
univ-lemans.fr
univ-lille.fr
univ-lorraine.fr
univ-lr.fr
univ-lyon2.fr
univ-lyon3.fr
univ-montp3.fr
univ-nantes.fr
univ-nc.nc
univ-orleans.fr
univ-paris1.fr
univ-paris8.fr
univ-perp.fr
univ-poitiers.fr
univ-reims.fr
univ-rennes.fr
univ-rennes2.fr
univ-rouen.fr
univ-savoie.fr
univ-smb.fr
univ-st-etienne.fr
univ-tln.fr
univ-tlse2.fr
univ-tlse3.fr
univ-toulouse.fr
univ-tours.fr
univ-ubs.fr
universite-paris-saclay.fr
upf.pf
usias.fr
ut-capitole.fr
utbm.fr
utt.fr
uttop.fr
vacataire.upf.pf
vet-alfort.fr
vetagro-sup.fr
+1 -1
Submodule secrets updated: d196a86833...6a1f95c183
+3 -2
View File
@@ -2,6 +2,7 @@ SAML2_BACKEND_CERT: ENC[AES256_GCM,data:uVs1uGoFfESz0eAkxvPUkSXQw6cCvzi+YfH7pbXL
SAML2_BACKEND_KEY: ENC[AES256_GCM,data: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,iv:itJR8JpZRrwhbQY/kTEURY28vyu1qex7GsRme9icZYw=,tag:JgkJOE+bdK19KjvdH/k1Ug==,type:str]
OIDC_FRONTEND_KEY: ENC[AES256_GCM,data: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,iv:EJEMIEsraig+i+5PlieAwHS6XV5bP+wlxv6Wni/9Dws=,tag:DM1XLnEtTp0vFEjAD4u4ag==,type:str]
STATE_ENCRYPTION_KEY: ENC[AES256_GCM,data:U0BoVcDN6/sNDST8epqmOzs5oWok6lRZ+hLo7O6/Mkz0cqB4rcHe/OOC9HTe39K5WUCD25Rfrb4lSeK0Finl9A==,iv:NM9Wjlx/llNc7Ws8DaNYy9dVq/oFEdlK5a/Alr5ZxVA=,tag:VT8GhiFxeI8AjdcKdRkEcQ==,type:str]
REDIS_PASSWORD: ENC[AES256_GCM,data:lf2Dadck+FkabNsliZCt+s3+fJsgwDyq4isod3mq1WM=,iv:R8Hed2qUe2hUbfILsh7yUf0vgLLLpQETeapr0h54D9w=,tag:+VTC3lf4fa+UFb9XDBgOSw==,type:str]
sops:
kms: []
gcp_kms: []
@@ -44,8 +45,8 @@ sops:
VVlBdFVNZUx1c2p2cERZVFVLWldORzQKaS/7SUU+ueI+MVU/gZIPmr9QwpdVkbGi
SFpfPMtN4CzcSBC4QsFXm7AeUZdpBiJMCLWApHGaas5ai6djiv47rg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-04-18T13:56:51Z"
mac: ENC[AES256_GCM,data:C/p3iSmwr7Tv4oqr1G0FxQ7z0kspFmFR7OsKkRsSLINQ+pvcpFAIjzloUoT32PO+QrBRRSmtGmE0CkmUHh7tEnUVB9q6GcPT/9OwQEqvqtmqx1vjQKNxdTt5zpe7GxLXoJywW1nhgehFweysIlT1r1jgraWidfQ17ZbSQU8ybg4=,iv:LFxTa39rTxfpE+9e5HCFkl6ggJTt1zJMvc745glky08=,tag:U5Z8/HdYE0ZikPEP7oVjzw==,type:str]
lastmodified: "2026-03-18T15:20:42Z"
mac: ENC[AES256_GCM,data:dxjNp3+ttM6ky02H5lYB9Fp5pG6CeijTnLzaxzHbKTJooIJudv52e3BDG6ui2GeMZINTaGt+IOfpCp2DE+pVZdvShbgrXZ7K1tvwzBslhH4uk48qo4rds9IXDaqPQhbAtlNPhdPPsdrkUA2Wrp3OLDPhi2DsVy5B9mhe6nukrBM=,iv:dWBRiQkp+zCjcGFKyn7uFqVJivwBFP7tpbdyQOA4rT4=,tag:0n9fxsl5BkQglDzobozzRA==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1
@@ -1,22 +0,0 @@
image:
repository: localhost:5001/oidc-test-client
pullPolicy: Always
tag: "latest"
ingress:
enabled: true
host: oidc-test-client.127.0.0.1.nip.io
env:
- name: OIDC_ROOT_URL
value: https://oidc-test-client.127.0.0.1.nip.io
- name: OIDC_PROVIDER
value: https://oidc2fer.127.0.0.1.nip.io
- name: OIDC_CLIENT_ID
value: oidc-test-client
- name: OIDC_CLIENT_SECRET
value: oidc-test-secret
- name: OIDC_SCOPES
value: openid,uid,given_name,usual_name,email,siret
- name: EXTRA_ROOT_CA
value: {{ exec "mkcert" (list "-CAROOT") | trim | printf "%s/rootCA.pem" | readFile | quote }}
+17 -4
View File
@@ -4,7 +4,17 @@ image:
tag: "latest"
satosa:
replicas: 1
replicas: 2
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/instance
operator: In
values:
- redis-oidc
topologyKey: kubernetes.io/hostname
env:
- name: BASE_URL
value: https://oidc2fer.127.0.0.1.nip.io
@@ -31,8 +41,11 @@ satosa:
- name: OIDC_FRONTEND_KEY
valueFrom: { secretKeyRef: { name: oidc2fer, key: OIDC_FRONTEND_KEY } }
- name: REDIS_PASSWORD
valueFrom: { secretKeyRef: { name: oidc2fer, key: REDIS_PASSWORD } }
- name: OIDC_DB_URI
value: "stateless://:$(STATE_ENCRYPTION_KEY)@localhost"
value: "redis://:$(REDIS_PASSWORD)@redis-oidc-master:6379/0"
- name: CLIENT_DB_JSON
value: |-
@@ -44,8 +57,7 @@ satosa:
],
"redirect_uris": [
"https://oidc-test-client.traefik.me/redirect_uri",
"https://oidc-test-client.traefik.me:8443/redirect_uri",
"https://oidc-test-client.127.0.0.1.nip.io/redirect_uri"
"https://oidc-test-client.traefik.me:8443/redirect_uri"
],
"client_secret": "oidc-test-secret",
"token_endpoint_auth_method": "client_secret_post"
@@ -57,6 +69,7 @@ satosa:
"https://test-idp.federation.renater.fr/idp/shibboleth": "12345678200010"
}
ingress:
enabled: true
host: oidc2fer.127.0.0.1.nip.io
@@ -1,10 +1,20 @@
image:
repository: ghcr.io/proconnect-gouv/oidc2fer
pullPolicy: Always
tag: "v1.0.13"
tag: "v1.0.12"
satosa:
replicas: 2
replicas: 4
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/instance
operator: In
values:
- redis-oidc
topologyKey: kubernetes.io/hostname
env:
- name: BASE_URL
value: https://renater.agentconnect.gouv.fr
@@ -34,8 +44,11 @@ satosa:
- name: CLIENT_DB_JSON
valueFrom: { secretKeyRef: { name: oidc2fer, key: CLIENT_DB_JSON } }
- name: REDIS_PASSWORD
valueFrom: { secretKeyRef: { name: oidc2fer, key: REDIS_PASSWORD } }
- name: OIDC_DB_URI
value: "stateless://:$(STATE_ENCRYPTION_KEY)@localhost"
value: 'redis://:$(REDIS_PASSWORD)@redis-oidc-master:6379/0'
# As provided by RENATER
- name: SIRET_MAP
@@ -167,6 +180,12 @@ satosa:
"https://idp4.cereq.fr/idp/shibboleth": "18004303600037",
"urn:mace:cru.fr:federation:univ-angers.fr": "19490970100303"
}
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
ingress:
enabled: true
@@ -5,6 +5,16 @@ image:
satosa:
replicas: 2
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/instance
operator: In
values:
- redis-oidc
topologyKey: kubernetes.io/hostname
env:
- name: BASE_URL
value: https://oidc2fer-staging.beta.numerique.gouv.fr
@@ -34,8 +44,11 @@ satosa:
- name: CLIENT_DB_JSON
valueFrom: { secretKeyRef: { name: oidc2fer, key: CLIENT_DB_JSON } }
- name: REDIS_PASSWORD
valueFrom: { secretKeyRef: { name: oidc2fer, key: REDIS_PASSWORD } }
- name: OIDC_DB_URI
value: "stateless://:$(STATE_ENCRYPTION_KEY)@localhost"
value: "redis://:$(REDIS_PASSWORD)@redis-oidc-master:6379/0"
- name: SIRET_MAP
value: |-
+14 -8
View File
@@ -21,6 +21,20 @@ repositories:
oci: true
releases:
- name: redis-oidc
namespace: {{ .Namespace }}
chart: bitnami/redis
version: 25.3.5
needs:
- oidc2fer
values:
- auth:
existingSecret: oidc2fer
existingSecretPasswordKey: REDIS_PASSWORD
architecture: standalone
image:
repository: bitnamilegacy/redis
- name: oidc2fer
version: {{ .Values.version }}
namespace: {{ .Namespace }}
@@ -29,11 +43,3 @@ releases:
- env.d/{{ .Environment.Name }}/values.oidc2fer.yaml.gotmpl
secrets:
- env.d/{{ .Environment.Name }}/secrets.enc.yaml
- name: oidc-test-client
installed: {{ eq .Environment.Name "dev" }}
version: {{ .Values.version }}
namespace: {{ .Namespace }}
chart: ./oidc-test-client
values:
- env.d/{{ .Environment.Name }}/values.oidc-test-client.yaml.gotmpl
-24
View File
@@ -1,24 +0,0 @@
apiVersion: v2
name: oidc-test-client
description: Test OIDC client
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.0.0"
@@ -1,51 +0,0 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "oidc-test-client.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "oidc-test-client.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "oidc-test-client.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "oidc-test-client.labels" -}}
helm.sh/chart: {{ include "oidc-test-client.chart" . }}
{{ include "oidc-test-client.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "oidc-test-client.selectorLabels" -}}
app.kubernetes.io/name: {{ include "oidc-test-client.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
@@ -1,71 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "oidc-test-client.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels:
{{- include "oidc-test-client.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "oidc-test-client.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "oidc-test-client.labels" . | nindent 8 }}
{{- with .Values.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
{{ with .Values.livenessProbe }}
livenessProbe: {{ toJson . }}
{{- end }}
{{ with .Values.readinessProbe }}
readinessProbe: {{ toJson . }}
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.env }}
env:
{{- toYaml . | nindent 12 }}
{{- end }}
command:
- sh
- -ec
- |-
printenv EXTRA_ROOT_CA >> $(python -m certifi)
exec python app.py
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
@@ -1,38 +0,0 @@
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "oidc-test-client.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ $fullName }}
namespace: {{ .Release.Namespace | quote }}
labels:
{{- include "oidc-test-client.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
ingressClassName: {{ .Values.ingress.className }}
{{- if .Values.ingress.tls.enabled }}
tls:
{{- if .Values.ingress.host }}
- secretName: {{ $fullName }}-tls
hosts:
- {{ .Values.ingress.host | quote }}
{{- end }}
{{- end }}
rules:
{{- if .Values.ingress.host }}
- host: {{ .Values.ingress.host | quote }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ $fullName }}
port:
number: {{ $svcPort }}
{{- end }}
{{- end }}
@@ -1,16 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "oidc-test-client.fullname" . }}
namespace: {{ .Release.Namespace | quote }}
labels:
{{- include "oidc-test-client.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "oidc-test-client.selectorLabels" . | nindent 4 }}
-71
View File
@@ -1,71 +0,0 @@
# Default values for oidc-test-client.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
repository: oidc-test-client
pullPolicy: Always
# Overrides the image tag whose default is the chart appVersion.
tag: ""
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
podAnnotations: {}
podLabels: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
service:
type: ClusterIP
port: 5000
ingress:
enabled: true
className: ""
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts: []
tls:
enabled: true
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
livenessProbe:
httpGet:
path: /healthz
port: http
periodSeconds: 30
readinessProbe: null
nodeSelector: {}
tolerations: []
affinity: {}
env: []
+1
View File
@@ -9,3 +9,4 @@ stringData:
SAML2_BACKEND_KEY: {{ .Values.SAML2_BACKEND_KEY | toYaml | indent 8 }}
OIDC_FRONTEND_KEY: {{ .Values.OIDC_FRONTEND_KEY | toYaml | indent 8 }}
CLIENT_DB_JSON: {{ .Values.CLIENT_DB_JSON | toYaml | indent 8 }}
REDIS_PASSWORD: {{ .Values.REDIS_PASSWORD | quote }}
+1 -1
View File
@@ -105,7 +105,7 @@ satosa:
## @param satosa.probes.readiness.initialDelaySeconds [nullable] Configure timeout for satosa readiness probe
probes:
liveness:
targetPost: 8000
targetPort: 8000
path: /ping
initialDelaySeconds: 10
#readiness:
+1
View File
@@ -26,6 +26,7 @@ requires-python = ">=3.14"
dependencies = [
"SATOSA==8.5.1",
"gunicorn==25.1.0",
"redis==7.2.1",
"JSON-log-formatter==1.1.1",
"WhiteNoise==6.12.0",
]
+6 -46
View File
@@ -1,9 +1,5 @@
import concurrent.futures
import json
import logging
import os
import time
import urllib.request
import pytest
from playwright.sync_api import Browser, Page, expect
@@ -36,7 +32,7 @@ def oidc_to_renater(
expected_given_name="Georges",
expected_usual_name="Grospieds",
):
page.goto("https://oidc-test-client.127.0.0.1.nip.io")
page.goto("https://oidc-test-client.traefik.me")
renater_wayf(page)
renater_test_idp(page, login=login)
@@ -45,7 +41,6 @@ def oidc_to_renater(
result = json.loads(text)
id_token = result["access_token_response"]["id_token"]
access_token = result["access_token_response"]["access_token"]
assert {"acr": "eidas1"}.items() <= id_token.items()
userinfo = result["userinfo"]
assert {
@@ -56,7 +51,7 @@ def oidc_to_renater(
"usual_name": expected_usual_name,
"siret": "12345678200010",
}.items() <= userinfo.items()
return id_token, access_token
return id_token
@pytest.mark.skipif(
@@ -64,53 +59,18 @@ def oidc_to_renater(
)
def test_oidc_to_renater_keeps_sub(browser: Browser):
with browser.new_context().new_page() as page:
id_token1, _ = oidc_to_renater(page)
id_token1 = oidc_to_renater(page)
with browser.new_context().new_page() as page:
id_token2, _ = oidc_to_renater(page)
id_token2 = oidc_to_renater(page)
assert id_token1["sub"] == id_token2["sub"]
@pytest.mark.skipif(
"BENCH_E2E" not in os.environ, reason="Benchmark runs only if requested"
)
def test_benchmark_userinfo(browser: Browser):
with browser.new_context().new_page() as page:
_, access_token = oidc_to_renater(page)
request_count = int(os.environ.get("BENCH_E2E_N", "100"))
client_count = int(os.environ.get("BENCH_E2E_P", "2"))
start = time.time()
def make_request():
return urllib.request.urlopen(
urllib.request.Request(
"https://oidc2fer.127.0.0.1.nip.io/OIDC/userinfo",
headers={"Authorization": f"Bearer {access_token}"},
)
)
with concurrent.futures.ThreadPoolExecutor(max_workers=client_count) as executor:
futures = []
for _ in range(request_count):
futures.append(executor.submit(make_request))
for future in concurrent.futures.as_completed(futures):
with future.result() as resp:
assert resp.status == 200
end = time.time()
logging.info(
"Average userinfo request time with %d parallel requests: \
%.2f seconds",
client_count,
(end - start) / request_count,
)
@pytest.mark.skipif(
"TEST_E2E" not in os.environ, reason="Depends on app running locally"
)
def test_oidc_to_renater_student_not_allowed(page: Page):
page.goto("https://oidc-test-client.127.0.0.1.nip.io")
page.goto("https://oidc-test-client.traefik.me")
renater_wayf(page)
renater_test_idp(page, login="etudiant1")
@@ -175,5 +135,5 @@ def test_pro_connect_to_renater_student_not_allowed(page: Page):
"TEST_E2E" not in os.environ, reason="Depends on app running locally"
)
def test_serve_static_assets(page: Page):
page.goto("https://oidc2fer.127.0.0.1.nip.io/images/logo.svg")
page.goto("https://satosa.traefik.me/images/logo.svg")
expect(page.locator("svg")).to_be_visible()
+23
View File
@@ -0,0 +1,23 @@
https://idp.enitab.fr/idp/shibboleth
https://auth.centrale-marseille.fr/idp/shibboleth
https://idp4.cereq.fr/idp/shibboleth
https://idp-ecole-air.renater.fr/idp/shibboleth
https://idp.enpc.fr/saml/metadata
https://idp.marseille.archi.fr/idp/shibboleth
https://idp.paris-malaquais.archi.fr/idp/shibboleth
https://idp.ens-rennes.fr/idp/shibboleth
https://idp2.ensai.fr/idp/shibboleth
https://idp.esaip.org/idp/shibboleth
https://idp.college-de-france.fr/idp/shibboleth
https://idp.inalco.fr/idp/shibboleth
https://idp-insa-cvl.renater.fr/idp/shibboleth
https://idp.oca.eu/idp/shibboleth
https://shibboleth3.obspm.fr/idp/shibboleth
https://idp.sigma-clermont.fr/idp/shibboleth
urn:mace:cru.fr:federation:univ-lyon1.fr
urn:mace:cru.fr:federation:univ-angers.fr
https://idp.univ-artois.fr/idp/shibboleth
https://idp.univ-pau.fr/idp/shibboleth
https://shibboleth.csi.uvsq.fr/idp/shibboleth
https://idp.uphf.fr/idp/shibboleth
https://idp.univ-paris13.fr/idp/shibboleth