Token Oluşturma
Client kimlik bilgilerinizi bir access token ve bir refresh token ile değiştirir. Diğer tüm partner endpoint'leri access token'ı Authorization: Bearer <access_token> olarak alır. expires_in bir zaman damgası değil, saniye cinsinden ömürdür (RFC 6749 §5.1).
Endpoint gateway'de herkese açıktır (bearer token gerekmez). Integration servisi yine de client kimlik bilgilerini, client'ın kullanım süresini ve client sertifika gerektiriyorsa client sertifikasını kontrol eder.
Her client'ın aynı anda yalnızca bir geçerli access token'ı vardır. Hangi grant ile olursa olsun yeni bir token almak, o client'ın önceki access token'ını anında geçersiz kılar: eski token ile yapılan sonraki çağrı 401 ile reddedilir. Birden fazla süreç aynı client'ı paylaşıyorsa token'ı tek bir süreç alıp diğerlerine dağıtmalı ya da her sürece ayrı bir client verilmelidir.
İstek
POST /v2/oauth/token
Başlıklar
| Ad | Açıklama |
|---|---|
Content-Type | Zorunlu. application/json |
Gövde
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
client_id | string | Evet | Client kimliğiniz |
client_secret | string | Evet | Client gizli anahtarınız |
grant_type | string | Evet | client_credentials, password ya da refresh_token. Grant client'ınızda tanımlı olmalıdır. |
username | string | password grant | Client'ınızın düğümündeki bir supervisor'ın e-postası |
password | string | password grant | O supervisor'ın parolası |
refresh_token | string | refresh_token grant | Client'ınıza verilmiş en son refresh token |
Grant türleri
| Grant | Kimin adına | Token'daki izinler | Access token ömrü | Refresh token ömrü |
|---|---|---|---|---|
client_credentials | Client'ın kendisi (makineden makineye) | Client'ta tanımlı scope'lar | Client'ın token_expiry.duration değeri; token_expiry.enabled false ise süresiz (expires_in bu durumda 0) | Access token ile aynı |
password | Client'ın düğümündeki bir supervisor | Supervisor'ın rol izinleri | 15 dakika (expires_in: 900) | 30 gün |
refresh_token | Refresh token'ın verildiği kimlik | İlk grant ile aynı | İlk grant ile aynı | İlk grant ile aynı |
Client politikasından bağımsız olarak bir refresh token, verildiği andan itibaren 365 günden sonra kullanılamaz.
Client credentials
curl --request POST \
--url '{{baseUrl}}/v2/oauth/token' \
--header 'Content-Type: application/json' \
--data '{
"client_id": "c1a9beda-b14c-4eb5-b880-113023e6fc2d",
"client_secret": "<client_secret>",
"grant_type": "client_credentials"
}'
Password
curl --request POST \
--url '{{baseUrl}}/v2/oauth/token' \
--header 'Content-Type: application/json' \
--data '{
"client_id": "c1a9beda-b14c-4eb5-b880-113023e6fc2d",
"client_secret": "<client_secret>",
"grant_type": "password",
"username": "supervisor@example.com",
"password": "<password>"
}'
Supervisor, client ile aynı düğüme ait olmalıdır; başka bir düğümün supervisor'ı tıpkı yanlış parola gibi reddedilir. Aynı kullanıcı adı ya da aynı adresten tekrarlanan hatalı parola denemeleri 429 ile yavaşlatılır.
Refresh token
curl --request POST \
--url '{{baseUrl}}/v2/oauth/token' \
--header 'Content-Type: application/json' \
--data '{
"client_id": "c1a9beda-b14c-4eb5-b880-113023e6fc2d",
"client_secret": "<client_secret>",
"grant_type": "refresh_token",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}'
Bir refresh token yalnızca bir kez kullanılır. Çağrı, sunulan refresh token'ı tüketir ve yeni bir çift döner; ikisini de saklayın. Tüketilmiş ya da daha yeni bir token ile geçersiz kalmış bir refresh token 400 ve 10006 koduyla reddedilir. Bir client'ın yalnızca en son verilen refresh token'ı geçerlidir; bu yüzden yeni bir client_credentials ya da password token'ı da bekleyen refresh token'ı geçersiz kılar.
Yanıt
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 900,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"scope": "token:view token:create default",
"created_at": 1762687200
}
Yanıt Alanları
| Alan | Tip | Açıklama |
|---|---|---|
access_token | string | Authorization: Bearer <access_token> olarak gönderilecek JWT |
token_type | string | Her zaman Bearer |
expires_in | number | Saniye cinsinden access token ömrü. Client politikası süresiz token veriyorsa 0 |
refresh_token | string | refresh_token grant'ı için tek kullanımlık token |
scope | string | Token'ın taşıdığı izinler, boşlukla ayrılmış (password için rol izinleri, client_credentials için client scope'ları) |
created_at | number | Token'ın verildiği Unix zamanı |
Hatalar
Bu endpoint ortak hata biçiminden daha eskidir ve retlerin çoğunu HTTP 409 ve kodu içinde taşıyan bir JSON string gövdesiyle yanıtlar:
"Code: 10003, Domain: 20, Message: invalid request"
| Durum | Gövde | Neden |
|---|---|---|
| 400 | string | Gövde ayrıştırılamıyor ya da client_id, client_secret veya grant_type eksik / bilinmeyen bir grant |
| 400 | {"code": 10006, "domain": 20, "message": "refresh token is no longer valid"} | Refresh token daha önce kullanılmış ya da daha yeni bir token ile geçersiz kalmış. Client'ınızın kendi grant'ı ile yeniden giriş yapın |
| 401 | {"code": 10005, "domain": 20, "message": "client certificate required"} | Client sertifika gerektiriyor ve TLS el sıkışmasında ona verilen sertifika sunulmadı. Bkz. mTLS Client Sertifikaları |
| 409 | Code: 10001 … client not found | Bilinmeyen client_id / client_secret çifti |
| 409 | Code: 10002 … client is inactive | Operatör client'ı devre dışı bıraktı |
| 409 | Code: 10004 … client has expired | Client'ın kullanım süresi doldu. Hiçbir grant, refresh_token dahil, token vermez |
| 409 | Code: 10003 … invalid request | Grant client'ta tanımlı değil; bir grant parametresi eksik; yanlış kullanıcı adı ya da parola; supervisor başka bir düğümde; refresh token hatalı biçimli, süresi dolmuş, 365 günden eski ya da başka bir client'a ait |
| 429 | {"code": 10001, "domain": 86, "message": "too many failed password attempts; try again later"} | Çok fazla hatalı password grant denemesi |
Diğer tüm endpoint'ler ortak hata biçimini kullanır.
Token'ı kullanmak
curl --request GET \
--url '{{baseUrl}}/v2/admin/tokens/68aeb272d9336c619ce249f6' \
--header 'Authorization: Bearer <access_token>'
Token eksik, hatalı biçimli, süresi dolmuş, bir refresh token ya da artık client'ın geçerli access token'ı değilse korumalı çağrı 401 döner. Yeni bir token alın (ya da refresh token'ı kullanın) ve tekrar deneyin.