
# keenauth_connection_oidc_config

`keenauth_connection_oidc_config` 리소스는 엔터프라이즈 OIDC 연결의 신뢰 당사자(RP) 구성을 설정합니다. 여기에는 ID 공급자의 발급자(issuer), 해당 공급자에 등록된 클라이언트 ID, 클라이언트 인증 방식, 공급자 프로필, 클라이언트 시크릿이 포함됩니다.

## 클라이언트 시크릿은 쓰기 전용입니다

`client_secret_wo`는 쓰기 전용 인수입니다. 프로바이더는 이 값을 API로 전송하며, 상태(state) 파일이나 계획(plan) 파일에는 기록하지 않습니다. API도 이 값을 반환하지 않습니다. 쓰기 전용 인수는 OpenTofu 1.11 이상 또는 Terraform 1.11 이상이 필요합니다. 이전 버전에서는 아무것도 전송되기 전에 구성이 거부됩니다. 이 경우 `keenauth connections oidc put`으로 시크릿을 설정하십시오.

OpenTofu가 계획에도 시크릿을 저장하지 않도록 임시(ephemeral) 변수에서 시크릿을 전달하십시오.

```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
}
```

ID 공급자에 `redirect_uri`(`https://<sp_host>/sso/<connection_id>/callback`)를 등록하십시오. ID 공급자가 지원하는 경우 `client_auth_method = "private_key_jwt"`를 사용하는 것을 권장합니다. 이 방식에서는 환경의 키가 클라이언트 어설션에 서명하므로 시크릿이 전혀 필요하지 않습니다.

## 교체

프로바이더는 시크릿을 다시 읽을 수 없으므로 시크릿의 변경을 감지할 수 없습니다. 프로바이더는 리소스를 생성할 때와 `client_secret_wo_version`이 변경될 때마다 `client_secret_wo`를 전송합니다. 시크릿을 교체하려면 같은 변경 작업에서 새 시크릿을 설정하고 버전을 올리십시오.

`client_secret_expires_at`은 ID 공급자가 시크릿을 무효화하는 시점을 알려 주는 참고 값입니다. API는 이 값을 시크릿과 함께만 기록하므로, 버전과 같은 변경 작업에서 변경하십시오.

## 계획 시점에 검사되는 규칙

| 규칙 | 이유 |
|---|---|
| `private_key_jwt`와 함께 `client_secret_wo`를 사용할 수 없습니다. | 이 방식은 시크릿을 사용하지 않으며, 이 방식으로 전환하면 저장된 시크릿이 삭제됩니다. |
| `client_secret_*` 방식은 생성 시 `client_secret_wo`가 필요하며, 저장된 시크릿이 없으면 새 버전이 필요합니다. | 그렇지 않으면 ID 공급자가 토큰 요청을 거부합니다. |
| 첫 번째 쓰기 이후에는 `sp_host`를 변경할 수 없습니다. | 콜백은 구성을 처음 기록할 때 고정됩니다. |
| `provider_profile = "entra"`일 때는 `entra_tenant_id`가 필요하며, 이 경우에만 사용할 수 있습니다. | API 규칙입니다. |
| `client_secret_expires_at`은 초 단위까지의 UTC여야 합니다(예: `2027-01-31T00:00:00Z`). | API가 이 형식으로 값을 반환하므로, 다른 형식을 사용하면 계획할 때마다 차이가 표시됩니다. |

## 가져오기와 삭제

연결 ID로 가져오십시오. API는 `sp_host`, `entra_tenant_id`, 시크릿을 반환하지 않으므로, 다음 계획에서 구성 값으로 구성을 한 번 기록합니다.

API에는 이 구성을 삭제하는 기능이 없습니다. 리소스를 삭제하면 상태에서만 제거되며, 구성은 해당 연결과 함께 삭제됩니다.
