> For the complete documentation index, see [llms.txt](https://docs.kangal.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kangal.dev/tr/authentication/api-tokens.md).

# Admin API token'ları

Yönetici API token'ları; otomasyon, dağıtım işleri ve harici yönetim istemcileri için makineden makineye kullanılan Bearer kimlik bilgileridir. Kullanıcı oturum token'ı, tüketici API anahtarı veya SCIM sağlama token'ı değildir.

## Kimlik bilgisi türleri

| Kimlik bilgisi           | Önek veya biçim | Amaç                                          | Tenant davranışı                                                               |
| ------------------------ | --------------- | --------------------------------------------- | ------------------------------------------------------------------------------ |
| Kullanıcı erişim token'ı | JWT Bearer      | Etkileşimli konsol ve kullanıcı API çağrıları | Kullanıcının tenant'ına sabittir.                                              |
| Yönetici API token'ı     | `kangaladm_...` | Yönetici API otomasyonu                       | Açıkça yetkilendirilmiş global super-admin token'ı dışında tenant kapsamlıdır. |
| SCIM token'ı             | `kscim_...`     | Yalnızca dizin sağlama                        | Oluşturulduğu tenant'a kalıcı olarak sabittir.                                 |

Yönetici API token'ını herkese açık bir çalışma zamanı rotasında kullanmayın veya uygulama tüketicilerine dağıtmayın.

## Konsoldan token oluşturma

1. Bir ağ geçidini açın ve **Anahtarlar** bölümünü seçin. Yerelleştirilmiş rota `/<locale>/dashboard/admin/gateways/<gateway-id>/keys` biçimindedir.
2. **Yeni anahtar** seçeneğini seçin.
3. Açıklayıcı bir ad, rol, virgülle ayrılmış kapsamlar ve isteğe bağlı bitiş tarihi girin.
4. Anahtarı oluşturun ve düz metin değerini hemen kopyalayın.

Anahtarlar sayfası, seçili ağ geçidine özgü kimlik bilgilerini değil ağ geçidinin tenant'ındaki tüm Yönetici API token'larını listeler. Token'ı bir ağ geçidi üzerinden oluşturmak, erişimini o ağ geçidiyle sınırlamaz.

Düz metin yalnızca oluşturma yanıtında döndürülür. Kangal, SHA-256 hash'i ve gösterim için kısa bir önek saklar. Liste ve ayrıntı yanıtlarında düz metin veya hash hiçbir zaman yer almaz.

## Roller ve kapsamlar

Bir isteğe hem token rolünün hem de kapsamın izin vermesi gerekir.

| Kapsam             | İzin verilen istekler                                        |
| ------------------ | ------------------------------------------------------------ |
| `admin:read`       | `GET`, `HEAD` ve `OPTIONS` yönetici istekleri.               |
| `admin:write`      | Değişiklik yapan yönetici istekleri ve okuma istekleri.      |
| `admin:*` veya `*` | Token rolü ve tenant'ın izin verdiği tüm yönetici istekleri. |

| Rol              | Davranış                                                                                            |
| ---------------- | --------------------------------------------------------------------------------------------------- |
| `admin_readonly` | Salt okunur yönetici rolüdür. `admin:write` ile birleştirilemez.                                    |
| `admin`          | Tenant yöneticisidir. Tenant kimliği zorunludur ve çağıran tarafından değiştirilemez.               |
| `super_admin`    | Global operatör rolüdür. Yalnızca oturum açmış bir super-admin oluşturabilir; tenant değeri boştur. |

`role` verilmezse salt okunur kapsamlar `admin_readonly`, yazma yetkili kapsamlar ise `admin` rolünü üretir. Standart bir yönetici yalnızca kendi tenant'ı için token oluşturabilir. Başka tenant'a yönelik oluşturma isteği `403` ile reddedilir.

## API ile oluşturma

Yenisini oluşturmak için mevcut ve yetkili bir yönetici oturumu veya token'ı kullanın. Örnekteki değerler yer tutucudur.

```bash
export KANGAL_URL='https://api.example.com'
export KANGAL_ADMIN_BEARER='<authorized-admin-bearer>'

curl --request POST "$KANGAL_URL/admin/api-tokens" \
  --header "Authorization: Bearer $KANGAL_ADMIN_BEARER" \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "ci-readonly",
    "tenant_id": "acme",
    "role": "admin_readonly",
    "scopes": ["admin:read"],
    "expires_at": "2027-01-01T00:00:00Z"
  }'
```

Yanıttaki `token` değerini onaylı bir gizli bilgi yöneticisinde saklayın. İşletim dokümanlarında yalnızca kayıt kimliğini ve öneki tutun.

Standart bir Bearer token olarak kullanın:

```bash
export KANGAL_API_TOKEN='<one-time-visible-token>'

curl "$KANGAL_URL/admin/gateways" \
  --header "Authorization: Bearer $KANGAL_API_TOKEN"
```

## Envanter ve durum

```bash
curl "$KANGAL_URL/admin/api-tokens?tenant_id=acme" \
  --header "Authorization: Bearer $KANGAL_ADMIN_BEARER"
```

Kayıtlar `token_prefix`, rol, kapsamlar, oluşturma zamanı, isteğe bağlı bitiş zamanı, iptal zamanı ve `last_used_at` alanlarını içerir. Token yalnızca süresi dolmamış ve iptal edilmemişken kullanılabilir. Envanteri incelerken yaşam döngüsü için `expires_at` ve `revoked_at` alanlarını esas alın.

## Yenileme ve iptal

Yönetici API token'ları yerinde güncellenmez.

1. Gerekli en düşük rol, kapsamlar ve tenant ile sınırlı süreli yeni bir token oluşturun.
2. Yeni düz metni saklayın ve istemciyi güncelleyin.
3. Kapsamına uygun bir okuma veya yazma işlemiyle doğrulayın.
4. Eski token'ı kayıt kimliğiyle iptal edin.

```bash
curl --request DELETE "$KANGAL_URL/admin/api-tokens/<token-id>" \
  --header "Authorization: Bearer $KANGAL_ADMIN_BEARER"
```

İptal, sonraki kimlik doğrulama denemelerinde hemen geçerli olur. Oluşturma ve iptal işlemleri, düz metin kimlik bilgileri kaydedilmeden denetim günlüğüne yazılır.

## Güvenlik uygulamaları

* Envanter ve raporlama işlerinde `admin:read` kullanmayı tercih edin.
* Global erişim açık bir operasyonel gereksinim değilse tenant token'ı kullanın.
* Her iş yüküne ayrı bir ad ve bitiş süresi verin; aynı anahtarı CI, operatörler ve üçüncü taraflar arasında paylaşmayın.
* Token'ı sorgu parametresinde, URL'de, destek kaydında, ekran görüntüsünde veya günlükte asla göndermeyin.
* Proxy ve gözlemlenebilirlik araçlarında `Authorization` başlığını maskeleyin.
* Düz metin değeri açığa çıktıysa kimlik bilgisini hemen iptal edin.

## Sorun giderme

| Belirti                                                            | Neden ve çözüm                                                                                                                     |
| ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| Düz metin geri alınamıyor                                          | Bu beklenen davranıştır. Yeni bir token oluşturup eski kaydı iptal edin.                                                           |
| `401 Invalid token`                                                | Token bilinmiyor, biçimi geçersiz, süresi dolmuş veya iptal edilmiştir. Görünen önek yerine tam değerin gönderildiğini doğrulayın. |
| `403 Insufficient admin token scope`                               | HTTP yöntemi `admin:write` istiyor veya rol salt okunurdur. Doğru kapsama sahip yeni bir token oluşturun.                          |
| `403 Cannot access another tenant`                                 | Token başka bir tenant'a sabittir. Başlık veya sorgu parametresiyle değiştirmeye çalışmayın.                                       |
| İptal edilmemiş token yine de başarısız                            | API kaydındaki `expires_at`, rol, kapsam ve tenant değerlerini doğrulayın.                                                         |
| Bir ağ geçidi altında oluşturulan anahtar başka birini görebiliyor | Token'lar ağ geçidi değil tenant kapsamlıdır. Kesin yalıtım için ayrı tenant'lar kullanın.                                         |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.kangal.dev/tr/authentication/api-tokens.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
