Skip to main content
Authorization Code akışı iki HTTP adımından oluşur: kullanıcının tarayıcısında yetkilendirme, sunucunuzda token değişimi.

Adım 1 — Kullanıcıyı yetkilendirmeye yönlendirin

Kullanıcıyı aşağıdaki URL’e yönlendirin. URL parametrelerini uygun şekilde doldurun ve scope değerini boşluk ile ayırın.
https://dev.flextell.ai/oauth/authorize
  ?response_type=code
  &client_id=SIZIN_CLIENT_ID
  &redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback
  &scope=customers%3Aread%20appointments%3Aread
  &state=RASTGELE_STRING

Query parametreleri

response_type
string
required
Her zaman code değerini gönderin.
client_id
string
required
OAuth uygulamanızın client_id değeri.
redirect_uri
string
required
Uygulamanızda kayıtlı redirect_uri değerlerinden biriyle birebir eşleşmelidir. URL-encode edilmiş olarak gönderin.
scope
string
required
Talep ettiğiniz scope’lar, boşluk ile ayrılmış. Uygulamanız oluşturulurken seçtiğiniz scope’ların alt kümesi olmalıdır.
state
string
required
CSRF koruması için rastgele üretilmiş bir değer. Callback’te aynı değeri alıp karşılaştırmalısınız.

Kullanıcı deneyimi

Kullanıcı daha önce Flextell’e giriş yapmamışsa bir login ekranı görür, sonra uygulamanızın talep ettiği izinleri gösteren bir onay ekranı görür. Onay verdiğinde Flextell onu redirect_uri’ye yönlendirir:
https://app.example.com/callback?code=def50200abcdef&state=RASTGELE_STRING
Kullanıcı reddederse:
https://app.example.com/callback?error=access_denied&state=RASTGELE_STRING
Callback’te önce state değerinin gönderdiğiniz değerle eşleşip eşleşmediğini kontrol edin. Eşleşmiyorsa isteği reddedin.

Adım 2 — code’u access token ile değişin

Sunucunuzdan token endpoint’ine bir POST atın. Bu istek yalnızca backend’den yapılmalıdır — client_secret tarayıcıda ifşa edilmemelidir.
curl --request POST \
  --url https://dev.flextell.ai/oauth/token \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data "grant_type=authorization_code" \
  --data "code=AUTHORIZATION_CODE" \
  --data "client_id=SIZIN_CLIENT_ID" \
  --data "client_secret=SIZIN_CLIENT_SECRET" \
  --data "redirect_uri=https://app.example.com/callback"

Başarılı yanıt

{
  "token_type": "Bearer",
  "expires_in": 1296000,
  "access_token": "eyJ0eXAiOiJKV1Q...",
  "refresh_token": "def502004d5c..."
}
token_type
string
Her zaman "Bearer".
expires_in
integer
Access token’ın geçerlilik süresi, saniye cinsinden (1296000 = 15 gün).
access_token
string
API isteklerinde Authorization: Bearer <token> olarak gönderin.
refresh_token
string
30 gün içinde access token yenilemek için kullanın. Detay: Token Yenileme.
id_token
string
Yalnızca openid scope’u talep edildiyse döner. Kullanıcının kimliğini kanıtlayan RS256 imzalı JWT. Detay: OpenID Connect.
Yetkilendirme sırasında scope=openid ... ekleyerek OIDC akışını başlatabilirsiniz; yanıtta ekstra bir id_token alırsınız. Kullanıcı bilgisi için profile, email, phone scope’larını da ekleyebilirsiniz. Tüm detaylar: OpenID Connect.

Hata yanıtları

HTTPerrorSebep
400invalid_requestZorunlu parametre eksik veya geçersiz biçimde.
400invalid_grantcode daha önce kullanılmış, süresi dolmuş veya farklı bir redirect_uri ile gönderilmiş.
401invalid_clientclient_id veya client_secret hatalı.
400unsupported_grant_typegrant_type değeri desteklenmiyor.
{
  "error": "invalid_grant",
  "error_description": "The authorization code has expired",
  "message": "The authorization code has expired"
}

PKCE (tek sayfa / mobil uygulamalar)

client_secret saklayamayan istemciler (SPA, native mobile) için PKCE (Proof Key for Code Exchange) kullanılmalıdır. Yetkilendirme URL’ine code_challenge + code_challenge_method=S256 ekler, token değişiminde client_secret yerine code_verifier gönderirsiniz.
curl --request POST \
  --url https://dev.flextell.ai/oauth/token \
  --data "grant_type=authorization_code" \
  --data "code=..." \
  --data "client_id=SIZIN_CLIENT_ID" \
  --data "code_verifier=ORIJINAL_VERIFIER" \
  --data "redirect_uri=https://app.example.com/callback"
Tam akış, örnek kodlar ve güvenlik kontrol listesi için: PKCE Akışı.

Access token’ı kullanma

Token’ı aldıktan sonra her API isteğinde Authorization header’ı ile gönderin. Multi-tenant endpoint’lerde ayrıca X-Tenant header’ı da gerekir:
curl --request GET \
  --url https://dev.flextell.ai/api/v1/customers \
  --header "Authorization: Bearer eyJ0eXAi..." \
  --header "X-Tenant: 12"
Detaylar için İstek Header’ları sayfasına bakın.