
# Télécharger les métadonnées SAML SP d'une connexion

`GET /v1/connections/{connection_id}/sp-metadata` · autorisation `connections:read`

Télécharge le document de métadonnées signé du fournisseur de service (SP) SAML 2.0 d'une connexion SAML d'entreprise : le fichier que l'administrateur du fournisseur d'identité importe chez ce dernier. Il s'agit du même document que celui servi à l'adresse publique des métadonnées de la connexion (`https://<hôte SP>/saml/<conn_…>/metadata`) :

- `entityID`, `validUntil` (7 jours à l'avance) et `cacheDuration` (`PT24H`) ;
- les certificats de signature et de chiffrement (deux de chaque pendant la fenêtre annuelle de rotation des clés) ;
- les formats NameID pris en charge, le service d'assertion consumer (HTTP-POST) et les points de terminaison de déconnexion unique ;
- une signature XML enveloppée réalisée avec la clé de signature SP active de la connexion.

Les clés SP sont créées au premier usage si elles n'existent pas encore. Le document ne contient aucun secret. Les lectures ne sont pas auditées.

Avec `revision_id`, vous obtenez à la place le document d'une [révision en brouillon](revisions.md). Pour une [migration de l'hôte SP](migrate-sp-host.md), il contient les points de terminaison du nouvel hôte : transmettez-le à l'administrateur du fournisseur d'identité avant de publier la révision.

## Requête

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `connection_id` | chemin | oui | ID de la connexion d'entreprise (`conn_…`). |
| `revision_id` | requête | non | Une révision en brouillon de la connexion (`connrev_…`). |

## Réponse

`200 OK` avec le document XML dans le corps de la réponse :

| En-tête | Valeur |
|---|---|
| `Content-Type` | `application/samlmetadata+xml` |
| `Content-Disposition` | `attachment; filename="<conn_…>-sp-metadata.xml"` |
| `Cache-Control` | `no-store` |

```xml
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
    ID="_…" entityID="https://acme.eu.keenauth.app/saml/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/metadata"
    validUntil="2026-11-02T10:00:00Z" cacheDuration="PT24H">
  <ds:Signature>…</ds:Signature>
  <md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    …
  </md:SPSSODescriptor>
</md:EntityDescriptor>
```

## Erreurs

| HTTP | code | Cas |
|---|---|---|
| 404 | `not_found` | La connexion n'existe pas dans cet environnement ou n'est pas une connexion d'entreprise. |
| 409 | `conflict` | La connexion n'est pas une connexion SAML, ou n'a pas encore de configuration SAML. |
| 422 | `validation_failed` | `revision_id` est mal formé ou répété (`invalid_value`, `repeated`), ou n'est pas une révision en brouillon de cette connexion (`not_found`) ; `errors[]` pointe vers `/revision_id`. |
| 401 | `unauthenticated` | L'identifiant est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant ne dispose pas de l'autorisation requise. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; réessayez après la durée indiquée par `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez après la durée indiquée par `Retry-After`. |

## Exemple

```bash
curl -o sp-metadata.xml "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/sp-metadata" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth connections sp-metadata conn_01j9xp6q0r1s5t7v9w1x3y5z7b --file sp-metadata.xml
```

Sans `--file`, la CLI écrit le XML sur la sortie standard. Un fichier existant n'est jamais écrasé.
