Kimlik Doğrulama¶
Bu API, sistemden sisteme Client Credentials tarzı bir kimlik doğrulama modeli kullanır.
Tam kapsamlı bağımsız bir OAuth Authorization Server değildir. Standartlara uygun bir token uç noktası ve korunan API rotaları için Bearer JWT koruması sağlar.
İlk sürüm modeli¶
| Karar | Değer |
|---|---|
| Akış | Client Credentials |
| Client sayısı | Tek standart integration client |
| Kimlik bilgisi kaynağı | Ortam değişkenleri (.env) |
| Token isteği kimlik doğrulaması | HTTP Basic |
| Access token | JWT (HS256) |
| Varsayılan süre | 60 dakika (expires_in=3600) |
| Refresh token | Desteklenmez |
| Scope | Desteklenmez |
| MongoDB client kaydı | Kullanılmaz |
Yapılandırma¶
| Değişken | Varsayılan | Notlar |
|---|---|---|
AUTH_ENABLED |
false |
Token uç noktasını ve Bearer korumasını açar |
AUTH_CLIENT_ID |
boş | Açıkken zorunlu |
AUTH_CLIENT_SECRET |
boş | Açıkken zorunlu, en az 32 karakter |
AUTH_JWT_SECRET |
boş | Açıkken zorunlu, en az 32 byte, client secret ile aynı olamaz |
AUTH_ISSUER |
iqv-integration-api |
JWT iss |
AUTH_AUDIENCE |
iqv-integration-api |
JWT aud |
AUTH_ACCESS_TOKEN_TTL |
60m |
Pozitif, en fazla 24 saat |
AUTH_TOKEN_MAX_BODY_BYTES |
16384 |
Token uç noktası gövde limiti |
AUTH_ENABLED=false¶
- Token uç noktası kaydedilmez (
404) POST /api/v1/inbound/work-ordersBearer token olmadan açık kalır- Yerel geliştirme için uygundur
AUTH_ENABLED=true¶
Örnek:
env
AUTH_ENABLED=true
AUTH_CLIENT_ID=iqv-standard-integration
AUTH_CLIENT_SECRET=
AUTH_JWT_SECRET=
AUTH_ISSUER=iqv-integration-api
AUTH_AUDIENCE=iqv-integration-api
AUTH_ACCESS_TOKEN_TTL=60m
Secret üretimi (depo içine yazmayın):
```powershell
48 karakterlik rastgele secret örneği (sonucu commit etmeyin)¶
$alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' -join (1..48 | ForEach-Object { $alphabet[(Get-Random -Maximum $alphabet.Length)] }) ```
Production ortamında kriptografik olarak güvenli bir secret yönetim aracı tercih edin.
Token uç noktası¶
text
POST {PUBLIC_BASE_URL}/api/v1/auth/token
İstek¶
Başlıklar:
http
Authorization: Basic BASE64(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Gövde:
text
grant_type=client_credentials
Kurallar:
- Kimlik bilgileri yalnız Basic Authorization başlığından alınır
client_id/client_secretgövdeye veya query string’e yazılmaz- JSON gövdeler reddedilir (
415) - Token uç noktası yalnız JSON yanıt üretir
Başarılı yanıt¶
json
{
"success": true,
"request_id": "uuid",
"data": {
"access_token": "jwt-token",
"token_type": "Bearer",
"expires_in": 3600
},
"error": null
}
Yanıt başlıkları Cache-Control: no-store ve Pragma: no-cache içerir.
Access token kullanımı¶
Korunan uç noktalar şunu ister:
http
Authorization: Bearer <access_token>
İş emri örneği:
http
POST {PUBLIC_BASE_URL}/api/v1/inbound/work-orders
Authorization: Bearer <access_token>
Content-Type: application/json
Accept: application/json
XML isteklerinde de aynı Authorization başlığı kullanılır:
http
POST {PUBLIC_BASE_URL}/api/v1/inbound/work-orders
Authorization: Bearer <access_token>
Content-Type: application/xml
Accept: application/xml
Client çalışma rehberi (ERP / cron)¶
- Client credentials ile token alın.
- Tokenı güvenli bellek/cache alanında saklayın.
- Süresi dolmamış token ile POST (ve ileride GET) isteklerini gönderin.
- Her cron çalışmasında yeniden token almayın.
- Token yoksa, süresi dolmuşsa veya bitmesine 5 dakikadan az kaldıysa yenileyin.
- Refresh token kullanmayın.
- API
401dönerse bir kez yeni token alıp isteği tekrar deneyin.
Public ve korunan rotalar¶
Public:
GET /GET /health/liveGET /health/readyGET /health/details(mevcut etkinleştirme kuralları aynı)POST /api/v1/auth/token(yalnız auth açıksa)
AUTH_ENABLED=true iken korunan:
POST /api/v1/inbound/work-orders
Taşıma güvenliği¶
- Production ortamında HTTPS / TLS zorunludur.
- Yerel geliştirmede güvenilir ağlarda HTTP kullanılabilir.
- Client secret veya access token’ı güvenilmeyen açık metin kanallardan göndermeyin.
Hata kodları¶
| Kod | HTTP | Anlam |
|---|---|---|
INVALID_REQUEST |
400 | Eksik grant_type veya hatalı token isteği |
UNSUPPORTED_GRANT_TYPE |
400 | grant_type değeri client_credentials değil |
INVALID_CLIENT |
401 | Basic client kimlik doğrulaması başarısız |
AUTHENTICATION_REQUIRED |
401 | Bearer token eksik |
INVALID_TOKEN |
401 | Bearer token geçersiz veya süresi dolmuş |
NOT_ACCEPTABLE |
406 | Token uç noktasında desteklenmeyen Accept |
PAYLOAD_TOO_LARGE |
413 | Token gövdesi limiti aşıldı |
UNSUPPORTED_MEDIA_TYPE |
415 | Form olmayan token Content-Type |
INTERNAL_ERROR |
500 | Beklenmeyen hata |
Postman¶
{PUBLIC_BASE_URL}/api/v1/auth/tokenadresine POST isteği oluşturun.- Authorization sekmesi: Type Basic Auth, username = client id, password = client secret.
- Body:
x-www-form-urlencoded,grant_type=client_credentials. - Headers:
Accept: application/json. data.access_tokendeğerini kopyalayın.- İş emri isteklerinde Authorization tipini Bearer Token yapın.
PowerShell örneği¶
```powershell $baseUrl = $env:PUBLIC_BASE_URL
Token isteği (curl.exe)¶
$tokenJson = curl.exe -sS -X POST "$baseUrl/api/v1/auth/token" -u "$($env:AUTH_CLIENT_ID):$($env:AUTH_CLIENT_SECRET)"
-H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json"
-d "grant_type=client_credentials"
$tokenResponse = $tokenJson | ConvertFrom-Json $accessToken = $tokenResponse.data.access_token
curl.exe -sS -X POST "$baseUrl/api/v1/inbound/work-orders" -H "Authorization: Bearer $accessToken"
-H "Content-Type: application/json" -H "Accept: application/json"
--data-binary "@work-order.json"
```
curl örneği¶
```bash BASE_URL="${PUBLIC_BASE_URL}"
curl -sS -X POST "${BASE_URL}/api/v1/auth/token" \ -u "${AUTH_CLIENT_ID}:${AUTH_CLIENT_SECRET}" \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Accept: application/json" \ -d "grant_type=client_credentials"
curl -sS -X POST "${BASE_URL}/api/v1/inbound/work-orders" \ -H "Authorization: Bearer ${ACCESS_TOKEN}" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ --data-binary @work-order.json ```
Production sertleştirme takip maddeleri¶
Bu branch’te uygulanmamıştır; sonraki aşamada önerilir:
- Token uç noktası rate limiting
- Secret rotation prosedürleri
- Gerekirse çoklu client kaydı