---
title: "Liste les providers SSO disponibles (pour la page login)."
method: GET
path: "/api/v1/integrations/sso-providers"
tags: ["Intégrations"]
---

# Liste les providers SSO disponibles (pour la page login).

`GET /api/v1/integrations/sso-providers`

## Request

- Base URL: `https://erp.eyeot.fr/api/v1`
- URL: `https://erp.eyeot.fr/api/v1/api/v1/integrations/sso-providers`
- Auth: none declared

Liste les providers SSO disponibles (pour la page login).

    Endpoint PUBLIC (pré-login, pas de JWT) — audit pro-ready 2026-06-23
    (finding high) + campagne MUST Vague 0 (2026-07-02) : l'ancienne
    réponse retournait un item PAR intégration directory de TOUTES les
    orgs, chacun avec son `integration_id` interne → énumération
    cross-tenant (ids internes + nombre d'orgs équipées) sur un endpoint
    sans auth. Fix, réponse minimale strictement pré-login :

    - `{provider, name}` uniquement — plus AUCUN identifiant interne ;
    - dédupliquée par provider (au plus 1 entrée microsoft + 1 google) —
      ne révèle plus combien d'orgs ont un SSO configuré ;
    - intégrations ACTIVES uniquement (`is_active=True`, comportement
      historique conservé — une intégration désactivée ne doit pas faire
      apparaître de bouton SSO sur la page login) ;
    - Home Realm Discovery optionnelle : `?email=user@acme.fr` masque les
      intégrations dont `credentials["domain"]` est configuré et ne
      correspond pas au domaine de l'email. Une intégration SANS domaine
      configuré reste visible (aucune restriction déclarée) — le flux
      existant (frontend appelle sans `email`) est inchangé.

    Le flux authorize (`GET /auth/sso/<provider>/authorize`) ne consomme
    pas d'id côté client : il résout l'intégration côté serveur via
    `_find_directory_integration()` — retirer `integration_id` ne casse
    donc rien (vérifié : `frontend/src/features/auth/{sign-in,sign-up}`
    n'utilisent que `provider` + `name`).

## Response `200`

Succès — payload `{data, meta}` (cf. API-GUIDE §3.1)

## Other responses

- `404`: Ressource introuvable (ou cross-tenant — équivalent à hidden).
- `429`: Trop de requêtes. Honorer le header `Retry-After` (secondes).

---

[API](https://skmtc.dev/eyeot/apis/eyeot-erp-api.md) · [All operations](https://skmtc.dev/eyeot/apis/eyeot-erp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eyeot/apis/eyeot-erp-api/revisions/42ab95222a89?raw)
