> 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/auth.md).

# Login ve hesap güvenliği

Kangal; parola, e-postayla gönderilen tek kullanımlık kod, yapılandırılmış OAuth sağlayıcıları ve tenant'a özel kurumsal SSO ile oturum açmayı destekler. Başarılı her giriş, tenant kapsamlı bir kullanıcı oturumu oluşturur. Sonraki tüm yetkilendirme kontrollerinde bu oturumdaki tenant ve rol kullanılır.

Makine otomasyonu farklı bir kimlik bilgisi kullanır. Kullanıcı erişim token'ını yeniden kullanmak yerine [Yönetici API token'ları](/tr/authentication/api-tokens.md) bölümüne bakın.

## Oturum açma yöntemini seçme

| Yöntem                                         | Ne zaman görünür?                                                         | Hesap davranışı                                                                               |
| ---------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| Kullanıcı adı veya e-posta ve parola           | Yerel giriş etkinse                                                       | Mevcut ve etkin bir hesapla oturum açar.                                                      |
| E-posta kodu                                   | Giden e-posta yapılandırılmışsa                                           | Benzersiz biçimde eşleşen tek bir etkin hesaba altı haneli, tek kullanımlık kod gönderir.     |
| Google, GitHub, Microsoft veya genel OAuth SSO | Operatör ilgili sağlayıcıyı yapılandırdıysa                               | Eşleşen hesabı bağlar veya sağlayıcının kayıt politikası izin veriyorsa yeni hesap oluşturur. |
| Kurumsal SSO                                   | Bir yönetici e-posta alan adını bir OIDC veya SAML sağlayıcısına atadıysa | Kuruluşun davet veya JIT politikasını uygular.                                                |
| Kuruluş daveti                                 | Bir yönetici süresi dolmamış bir davet oluşturduysa                       | Davet edilen tenant hesabını oluşturur ve kullanıcı oturumunu açar.                           |

## Operatör gereksinimleri

* OAuth veya kurumsal SSO'yu etkinleştirmeden önce herkese açık API ve konsol origin'lerini yapılandırın. Onaylı origin listesi dışındaki yönlendirmeler reddedilir.
* Tüm API replica'larında aynı JWT imzalama yapılandırmasını kullanın; oturumlar, yenileme token'ları, giriş doğrulamaları ve callback state'i için paylaşılan Redis çalıştırın. Replica'ya özel cache bu ortak durumun yerine geçmez.
* Production ortamında kalıcı bir imzalama gizli bilgisi tanımlayın. Anahtar yenilerken yeni anahtarı ve onaylı önceki doğrulama anahtarlarını tüm replica'lara tutarlı biçimde dağıtın.
* E-posta koduyla giriş veya parola kurtarmayı sunmadan önce SMTP teslimatını doğrulayın. Giriş sayfası yalnızca gerekli yapılandırması hazır yöntemleri gösterir.

## Konsoldan oturum açma

`/<locale>/login` adresini açın; örneğin `/en/login` veya `/tr/login`.

### Parola

1. Her iki yerel yöntem de kullanılabiliyorsa **Parola** seçeneğini seçin.
2. Kullanıcı adı veya e-posta ile parolayı girin.
3. Kangal hesabı ve tenant'ını çözümler, bir oturum oluşturur ve istenen konsol sayfasını açar.

Aynı kullanıcı adı veya e-posta birden fazla tenant'ta bulunabilir. Tenant açıkça belirtilmeden yapılan giriş, yalnızca tanımlayıcı tek bir hesapla eşleşiyorsa başarılı olur. Aynı e-posta veya kullanıcı adı birden fazla hesapla eşleşiyorsa hesaba özgü başka bir tanımlayıcı kullanın ya da kurumsal bağlamı yöneticinizle doğrulayın. API istemcileri giriş gövdesinde `tenant_id` veya giriş isteğinde `X-Tenant-ID` gönderebilir.

### Tek kullanımlık e-posta kodu

1. **E-posta kodu** seçeneğini seçin.
2. Hesabın e-posta adresini girip **Kod gönder** seçeneğini kullanın.
3. Altı haneli kodu süresi dolmadan girin.

İsteğin yanıtı, bir hesabın varlığını açığa çıkarmamak için bilinen ve bilinmeyen adreslerde bilinçli olarak aynıdır. Kodlar tek kullanımlıktır; yapılandırılmış bir geçerlilik süresi, yeniden gönderim aralığı ve deneme sınırı vardır. Ayrıca e-posta ve istemci IP'sine göre hız sınırı uygulanır. E-posta koduyla giriş, yalnızca e-posta tam olarak bir etkin Kangal hesabıyla eşleşiyorsa kullanılabilir.

### OAuth

Yalnızca yapılandırılmış sağlayıcılar `GET /auth/oauth/providers` yanıtında ve giriş sayfasında gösterilir. Google ve GitHub, sağlayıcı tarafından doğrulanmış bir e-posta ister. Sağlayıcı kimliği, sağlayıcının subject değeriyle bağlanır; eşleşen e-posta yapılandırılmış tenant içindeki mevcut bir hesaba bağlanabilir. Yeni hesap oluşturma, varsayılan tenant seçimi ve isteğe bağlı kişisel tenant oluşturma, her sağlayıcı için operatör tarafından belirlenen politikalardır.

OAuth state değeri tek kullanımlıktır ve beş dakika sonra geçerliliğini yitirir. Yönlendirmeler yalnızca yapılandırılmış konsol origin'lerine veya güvenli göreli yollara kabul edilir. İptal edilen onay, süresi dolmuş state, doğrulanmamış e-posta, hesap bağlama çakışması ve etkin olmayan hesap durumlarında kullanıcı, sınırlandırılmış bir hata koduyla giriş sayfasına döner. Sağlayıcı token'ları ve authorization code değerleri konsolda gösterilmez.

### Kurumsal SSO

**SSO** alanına iş e-postanızı girin. Kangal, e-posta alan adına göre etkin sağlayıcıyı bulur ve kuruluşun OIDC veya SAML kimlik sağlayıcısına yönlendirir. Hesabın önceden var olması, bekleyen bir davete sahip olması veya JIT oluşturma koşullarını karşılaması gerekir. Ayrıntılar için [SSO ve SCIM](/tr/organizasyon-ve-erisim/sso-scim.md) bölümüne bakın.

## Oturum yaşam döngüsü

| Öğe                                           | Davranış                                                                                                              |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| Erişim token'ı                                | Varsayılan olarak 60 dakika geçerli Bearer JWT'dir; kullanıcı, tenant, rol ve oturum kimliğini içerir.                |
| Yenileme token'ı                              | Varsayılan olarak yedi gün geçerlidir; sunucu tarafında hash olarak saklanır ve her başarılı yenilemede değiştirilir. |
| Tarayıcı depolaması                           | Erişim ve yenileme token'ları kalıcı `localStorage` yerine bellekte ve tarayıcı `sessionStorage` alanında tutulur.    |
| Otomatik yenileme                             | Bir `401`, paylaşılan tek bir yenileme denemesi başlatır; bekleyen istekler yeni erişim token'ını kullanır.           |
| Paralel giriş                                 | Aynı anda birden fazla erişim oturumu geçerli kalabilir.                                                              |
| Çıkış                                         | Geçerli erişim oturumunu sonlandırır ve kullanıcının ilgili tenant'taki yenileme token'larını iptal eder.             |
| Parola sıfırlama veya SCIM devre dışı bırakma | Kullanıcının ilgili tenant'taki tüm erişim oturumlarını ve yenileme token'larını iptal eder.                          |

Eski yenileme token'ı değiştirildikten sonra yeniden kullanılamaz. Yenileme başarısız olursa konsol yerel oturumu temizler ve giriş sayfasına döner. Bir tarayıcıdan çıkış yapmak, daha önce oluşturulmuş tüm paralel erişim token'larını hemen kaldırmaz; yönetici kullanıcıyı devre dışı bırakmadıkça veya kullanıcı parolasını sıfırlamadıkça bu oturumlar doğal süreleri dolana kadar geçerli kalır.

Rol değişiklikleri yeni oluşturulan erişim token'larına yansır. Mevcut bir erişim token'ı, süresi dolana veya oturumu iptal edilene kadar önceki rolü taşıyabilir.

## API iş akışı

Yer tutucu veya ortam değişkeni kullanın; gerçek parola veya token'ları dokümana, kaynak kontrole, kabuk geçmişine ya da destek iletilerine eklemeyin.

```bash
export KANGAL_URL='https://api.example.com'

curl --request POST "$KANGAL_URL/auth/login" \
  --header 'Content-Type: application/json' \
  --data '{
    "username": "operator@example.com",
    "password": "<password>",
    "tenant_id": "acme"
  }'
```

Yanıt `access_token`, `refresh_token`, `token_type` ve `expires_in` alanlarını içerir. Erişim token'ını Bearer kimlik bilgisi olarak kullanın:

```bash
curl "$KANGAL_URL/auth/me" \
  --header 'Authorization: Bearer <access-token>'
```

Erişim token'ının süresi dolmadan yenileme token'ını değiştirin:

```bash
curl --request POST "$KANGAL_URL/auth/refresh" \
  --header 'Content-Type: application/json' \
  --data '{"refresh_token":"<current-refresh-token>"}'
```

Yerel iki değeri de yanıtta dönen yeni çiftle değiştirin. Önceki yenileme token'ını yeniden kullanmak `401` yanıtı üretir.

Çıkış yapmak için geçerli erişim token'ını gönderin:

```bash
curl --request POST "$KANGAL_URL/auth/logout" \
  --header 'Authorization: Bearer <access-token>'
```

## Hesap oluşturma ve kurtarma

* `/auth/register`, yönetici korumalı bir hesap oluşturma endpoint'idir. Müşteri hesabı oluşturmak için yetkili yönetici, davet, federasyon veya dizin sağlama iş akışını kullanın.
* Kuruluş davetleri `user`, `admin_readonly` veya `admin` rolünde, tenant kapsamlı hesap oluşturur ve en az 12 karakterlik parola ister.
* Kurumsal JIT ve standart OAuth kaydı sağlayıcı politikasına bağlıdır.
* SCIM ile oluşturulan kullanıcılar `user` rolü ve üretilmiş bir parolayla başlar.
* **Parolamı unuttum**, tek kullanımlık kod gönderir. Başarılı sıfırlama için en az sekiz karakterlik yeni parola gerekir ve ilgili tenant'taki tüm mevcut oturumlar iptal edilir.

## Sorun giderme

| Belirti                                  | Kontrol                                                                                                                              |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Parola formu görünmüyor                  | Yerel giriş operatör tarafından devre dışı bırakılmış olabilir.                                                                      |
| E-posta kodu seçeneği görünmüyor         | Giden e-posta hazır değildir.                                                                                                        |
| Kod ulaşmıyor                            | Spam filtresini ve teslimat durumunu kontrol edin; bilinmeyen veya belirsiz bir e-posta için istek bilinçli olarak başarılı görünür. |
| Kod isterken `429` alınıyor              | Yeniden gönderim aralığını bekleyin; tekrarlanan isteklere hız sınırı uygulanır.                                                     |
| Giriş hesabın belirsiz olduğunu söylüyor | API üzerinden tenant'ı belirtin veya tenant'lar arasında benzersiz bir tanımlayıcı kullanın.                                         |
| OAuth düğmesi görünmüyor                 | Sağlayıcı yapılandırması eksik veya sağlayıcı devre dışıdır.                                                                         |
| OAuth invalid state hatası veriyor       | Yeni bir giriş başlatın; state kısa ömürlü ve tek kullanımlıktır.                                                                    |
| Kurumsal SSO sağlayıcısı bulunamıyor     | Sağlayıcının etkin olduğunu ve e-posta alan adının doğrulanmış alan adıyla tam eşleştiğini doğrulayın.                               |
| API art arda `401` döndürüyor            | En güncel yenileme token'ıyla bir kez yenileyin. Başarısız olursa yeniden giriş yapın.                                               |
| API `403` döndürüyor                     | Kimlik doğrulama başarılıdır; ancak oturum rolü, token kapsamı, tenant veya ayrıntılı izin işleme yetki vermiyordur.                 |


---

# 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/auth.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.
