
# keenauth_connection_oidc_config

La ressource `keenauth_connection_oidc_config` définit la configuration de la partie de confiance (relying party) d'une connexion OIDC d'entreprise : l'émetteur du fournisseur d'identité, l'ID client enregistré auprès de celui-ci, la méthode d'authentification du client, le profil du fournisseur et le secret client.

## Le secret client est en écriture seule

`client_secret_wo` est un argument en écriture seule. Le provider envoie ce secret à l'API et ne l'écrit jamais dans les fichiers d'état ou de plan, et l'API ne le renvoie jamais. Les arguments en écriture seule nécessitent OpenTofu 1.11 ou Terraform 1.11 ou une version ultérieure. Une version plus ancienne rejette la configuration avant tout envoi ; dans ce cas, définissez le secret avec `keenauth connections oidc put`.

Fournissez le secret à partir d'une variable éphémère, afin qu'OpenTofu ne le stocke pas non plus dans le plan :

```terraform
variable "corp_idp_client_secret" {
  type      = string
  sensitive = true
  ephemeral = true
}

resource "keenauth_connection" "corp" {
  key      = "corp-oidc"
  type     = "enterprise"
  strategy = "oidc"
  name     = "corp-oidc"
}

resource "keenauth_connection_oidc_config" "corp" {
  connection_id      = keenauth_connection.corp.id
  sp_host            = "acme.eu.keenauth.app"
  issuer             = "https://login.idp.example.com"
  client_id          = "keenauth-rp"
  client_auth_method = "client_secret_basic"

  client_secret_wo         = var.corp_idp_client_secret
  client_secret_wo_version = 1
}
```

Enregistrez `redirect_uri` (`https://<sp_host>/sso/<connection_id>/callback`) auprès du fournisseur d'identité. Si votre fournisseur d'identité le permet, privilégiez `client_auth_method = "private_key_jwt"` : la clé de l'environnement signe l'assertion client et aucun secret n'est nécessaire.

## Rotation

Le provider ne peut pas relire le secret, il ne peut donc pas détecter une modification de celui-ci. Il envoie `client_secret_wo` lors de la création de la ressource, puis à chaque changement de `client_secret_wo_version`. Pour effectuer une rotation, remplacez le secret et augmentez la version dans la même modification.

`client_secret_expires_at` rappelle la date à laquelle le fournisseur d'identité invalidera le secret. L'API ne l'écrit qu'avec le secret ; modifiez-le donc dans la même modification que la version.

## Règles vérifiées au moment du plan

| Règle | Motif |
|---|---|
| `client_secret_wo` n'est pas autorisé avec `private_key_jwt`. | Cette méthode n'utilise aucun secret ; y passer supprime le secret stocké. |
| Une méthode `client_secret_*` exige `client_secret_wo` à la création, et une nouvelle version lorsqu'aucun secret n'est stocké. | Le fournisseur d'identité rejetterait la requête de jeton. |
| `sp_host` ne peut pas être modifié après la première écriture. | Le callback est figé lors de la première écriture de la configuration. |
| `entra_tenant_id` est obligatoire avec `provider_profile = "entra"` et n'est autorisé que dans ce cas. | Règle de l'API. |
| `client_secret_expires_at` est en UTC avec des secondes entières, par exemple `2027-01-31T00:00:00Z`. | L'API le renvoie sous cette forme ; une autre forme provoquerait une différence à chaque plan. |

## Import et destruction

Importez la ressource avec l'ID de la connexion. L'API ne renvoie ni `sp_host`, ni `entra_tenant_id`, ni le secret ; le plan suivant écrira donc la configuration une fois avec les valeurs de votre configuration.

L'API ne propose pas de suppression pour cette configuration. La destruction de la ressource la retire uniquement de l'état ; la configuration est supprimée avec sa connexion.
