
# keenauth_directory_token

`keenauth_directory_token` kaynağı, bir dizine kullanıcı ve grup sağlayan kimlik sağlayıcı için dizinin SCIM taşıyıcı token'ını oluşturur. Sağlayıcı token'ı durum dosyasında yalnız sizin verdiğiniz RSA ortak anahtarıyla şifrelenmiş olarak tutar.

```terraform
resource "keenauth_directory_token" "okta" {
  directory_id    = keenauth_directory.acme_okta.id
  label           = "Okta"
  expires_in_days = 180
  public_key      = file("${path.module}/scim-token-key.pub.pem")

  lifecycle {
    create_before_destroy = true
  }
}

output "okta_scim_token_encrypted" {
  value = keenauth_directory_token.okta.encrypted_token
}
```

## Token hiçbir zaman düz metin saklanmaz

API bir SCIM token'ını onu oluşturan yanıtta bir kez döndürür ve sonradan hiçbir uç nokta onu okuyamaz. Sağlayıcı token'ı ortak anahtarınızla (SHA-256, MGF1 SHA-256 ve boş etiketle RSA-OAEP) şifreler ve `encrypted_token` alanına yalnız base64 şifreli metni yazar. Düz token durum dosyasına, plan dosyasına, çıktıya ya da loga hiçbir zaman ulaşmaz. Onu yalnız özel anahtarın sahibi çözebilir; bu yüzden durum dosyası sızsa da token sızmaz.

Anahtar çiftini bir kez, OpenTofu dışında oluşturun ve özel anahtarı yapılandırmanızın dışında tutun:

```shell
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out scim-token-key.pem
openssl pkey -in scim-token-key.pem -pubout -out scim-token-key.pub.pem
```

`tofu apply` sonrasında token'ı çözün ve kimlik sağlayıcıya verin:

```shell
tofu output -raw okta_scim_token_encrypted | base64 -d | \
  openssl pkeyutl -decrypt -inkey scim-token-key.pem \
    -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256
```

`public_key` en az 2048 bitlik, PEM biçiminde bir RSA ortak anahtarı (`PUBLIC KEY` ya da `RSA PUBLIC KEY`) olmalıdır. Özel anahtar ya da daha küçük bir anahtar plan aşamasında reddedilir. Sağlayıcı bir token'ı teslim edemezse token'ı hemen iptal eder ve apply başarısız olur; böylece kimsenin elinde olmayan geçerli bir token kalmaz.

## Yalnız oluşturma ve iptal

Token değiştirilemez. Her argüman (`directory_id`, `label`, `expires_in_days`, `public_key`) değiştiğinde yeni bir token oluşturur ve eski token iptal edilir. Kaynağı yok etmek token'ı iptal eder.

Sağlayıcı dışında iptal edilen ya da süresi dolan token sonraki yenilemede durumdan düşer ve sonraki apply yeni bir token oluşturur. Dizini silmek token'larını da siler.

## Döndürme

Bir dizinde en çok 2 geçerli token olur; üçüncüsü `409` ile reddedilir. Bu, kesintisiz döndürme için yeterlidir: `create_before_destroy = true` ile yeni token eski token iptal edilmeden önce oluşturulur. Yeni token'ı aynı değişiklik penceresinde kimlik sağlayıcıya verin.

## Argümanlar

- `label` 1 ile 100 karakter arasıdır; denetim karakteri içermez, başında ya da sonunda boşluk olmaz. API varsayılanı `Token`'dır.
- `expires_in_days` 30 ile 730 arasıdır. API varsayılanı 365'tir.
- `encrypted_token`, `created_at`, `expires_at` ve `id` salt okunurdur.

## İçe aktarma

Kaynak içe aktarılamaz: mevcut bir token'ın değeri bir daha okunamaz, bu yüzden içe aktarılan token teslim edilemez. Eski token'ı `keenauth directories tokens delete <directory_id> <token_id>` ile iptal edin ve sağlayıcının yeni bir token oluşturmasına izin verin.
