Nuvaka › Geliştirici belgeleri › Nuvaka ile giriş
Nuvaka ile giriş
Masaüstü programın, web siten ya da komut satırı aracın kullanıcıyı Nuvaka hesabıyla tanıyabilir. Kullanıcı izin verirse uygulaman ona bildirim gönderebilir ve seçtiği tek bir Dosyalarım klasöründe okuyup yazabilir. Standart OAuth 2.1 ve OpenID Connect; hazır kütüphanelerle çalışır.
Nasıl çalışır
- Parola hiç girilmez. Kullanıcı ne tarayıcıda ne de senin uygulamanda Nuvaka parolası yazar. Onay, kullanıcının zaten oturum açık olduğu Nuvaka General App'te verilir.
- Tarayıcıdaki onay sayfası kısa bir onay kodu (
XXXX-XXXX) ve "General App'te onayla" düğmesi (nuvaka://oauth?code=…) gösterir. Uygulama açılır, kullanıcı uygulamanın adını, dönüş adresini ve istenen izinleri görür; onaylar ya da reddeder. Kod elle de girilebilir: Profil › Bağlı uygulamalar. - Kullanıcı bağlı uygulamalarını aynı yerde görür ve Erişimi kaldır ile istediği an iptal eder; tüm token'lar anında geçersiz olur. Her girişte kullanıcıya "X uygulamasına giriş yapıldı" bildirimi gider.
İstemci kaydı
İstemcileri şimdilik Nuvaka ekibi kaydeder: destek üzerinden uygulamanın adını, logosunu, istemci türünü, dönüş adreslerini ve istediğin izinleri yaz. Sana bir client_id verilir (sunucu tarafı uygulamada ayrıca bir kez gösterilen nvcs_… sırrı).
| Tür | Kimin için | Kimlik doğrulama |
|---|---|---|
public | masaüstü, mobil, komut satırı (sır saklayamaz) | yalnız client_id + PKCE |
confidential | sunucu tarafı web uygulaması | client_secret_post ya da client_secret_basic |
Dönüş adresi (redirect_uri) kayıtla birebir eşleşmelidir. Kabul edilen biçimler: https://…; loopback http://127.0.0.1:port/… (port da kayıtlı); ters alan adlı özel şema (com.ornek.app:/cb).
İzinler (scope)
| scope | Ne verir |
|---|---|
openid | giriş; sub kullanıcının değişmeyen kimliği. Kullanıcı kapatamaz |
profile | preferred_username |
email | email, email_verified. Kullanıcı onayda kapatabilir; olmadan da çalışmaya hazır ol |
notifications.send | kullanıcıya bildirim (bağlantı başına saatte 20) |
storage.folder | kullanıcının onayda seçtiği tek Dosyalarım klasörü ve alt klasörleri: listele, indir, yükle, sil. Güvenli Alan ve sistem klasörleri seçilemez |
offline_access | yenileme token'ı |
Yalnız istemcine izinli scope'ları isteyebilirsin; bilinmeyen ya da izinsiz scope invalid_scope döner. Kullanıcı openid dışındaki izinleri kapatabilir; token yanıtındaki scope alanı gerçekte verilenleri söyler.
Uç noktalar
Issuer: https://generalappapi.nuvaka.com. Keşif belgesi tüm adresleri verir; kütüphanene yalnız bunu göster.
| Uç | Açıklama |
|---|---|
GET /.well-known/openid-configuration | keşif |
GET /oauth/jwks | id_token imza anahtarı (RS256, kid) |
GET /oauth/authorize | onay sayfası (tarayıcıda açılır) |
POST /oauth/device | cihaz akışını başlat |
POST /oauth/token | authorization_code, refresh_token, urn:ietf:params:oauth:grant-type:device_code |
GET|POST /oauth/userinfo | Bearer; openid gerekir |
POST /oauth/revoke | token iptali (RFC 7009, her zaman 200) |
Hatalar RFC 6749 biçimindedir: { error, error_description }; kötü istemci 401 invalid_client. Uçlar IP başına dakikada 60 istekle sınırlıdır (429).
Yetkilendirme kodu + PKCE (masaüstü ve web)
PKCE zorunludur ve yalnız S256 kabul edilir. state (CSRF) ve nonce önerilir.
- PKCE üret
code_verifier43–128 karakter rastgele;code_challenge = BASE64URL(SHA256(code_verifier)). - Tarayıcıyı aç
Kullanıcıyı onay sayfasına gönder. Masaüstünde loopback dinleyici (
http://127.0.0.1:PORT/cb) ya da özel şema kullan. - Kullanıcı General App'te onaylar
Sayfa kendini 2 saniyede bir yoklar. Onayda
redirect_uri?code=nvac_…&state=…&iss=…, reddedilirseredirect_uri?error=access_denied&state=…&iss=…adresine döner.state'i veiss'i doğrula. - Kodu takas et
Kod tek kullanımlık ve 5 dakikalık; aynı
redirect_urigönderilmeli. İstek (onay sayfası) 10 dakika geçerlidir.
# 2) Tarayıcıda açılacak adres
https://generalappapi.nuvaka.com/oauth/authorize?response_type=code
&client_id=ornek-masaustu
&redirect_uri=http%3A%2F%2F127.0.0.1%3A53682%2Fcb
&scope=openid%20profile%20storage.folder%20offline_access
&state=RASTGELE&nonce=RASTGELE
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
&code_challenge_method=S256
# 4) Kod takası
curl -X POST https://generalappapi.nuvaka.com/oauth/token \
-d grant_type=authorization_code -d code=nvac_… \
-d redirect_uri=http://127.0.0.1:53682/cb \
-d code_verifier=… -d client_id=ornek-masaustu
{ "access_token": "nvo_…", "token_type": "Bearer", "expires_in": 3600,
"scope": "openid profile storage.folder offline_access",
"refresh_token": "nvr_…", "id_token": "eyJ…" }
Yönlendirilen hatalar (dönüş adresi doğrulandıktan sonra): unsupported_response_type, invalid_request (PKCE yok ya da S256 değil), invalid_scope. Bilinmeyen istemci ya da kayıtsız dönüş adresinde yönlendirme yapılmaz, hata sayfası gösterilir.
Cihaz akışı (TV, konsol, komut satırı)
Tarayıcısı olmayan ya da dönüş adresi alamayan araçlar için (RFC 8628).
curl -X POST https://generalappapi.nuvaka.com/oauth/device -d client_id=ornek-cli -d scope="openid profile"
# → { device_code, user_code: "WDJB-MJHT", verification_uri, verification_uri_complete, expires_in: 600, interval: 5 }
# Kullanıcıya user_code'u ve verification_uri'yi göster (ya da verification_uri_complete için QR).
# Sonra interval saniyede bir yokla:
curl -X POST https://generalappapi.nuvaka.com/oauth/token \
-d grant_type=urn:ietf:params:oauth:grant-type:device_code -d device_code=… -d client_id=ornek-cli
Yoklama yanıtları: authorization_pending (bekle), slow_down (aralığı artır), access_denied, expired_token ya da başarıda token'lar.
Token'lar
| Token | Önek | Ömür |
|---|---|---|
| erişim | nvo_ | 1 saat |
| yenileme | nvr_ | 30 gün, yalnız offline_access ile |
| id_token | JWT (RS256) | 1 saat |
- Yenileme döner:
grant_type=refresh_tokenher kullanımda yeni bir erişim ve yeni bir yenileme token'ı verir; eskisi hemen iptal olur. İptal edilmiş bir yenileme token'ı yeniden gelirse (sızıntı belirtisi) bağlantının bütün token'ları iptal edilir veinvalid_grantdöner. Yeni token'ı hemen sakla. - id_token:
iss,aud(= client_id),sub,iat,exp, varsanonce;profileilepreferred_username,emailileemailveemail_verified. İmzayı/oauth/jwksile doğrula. - Token'lar opaktır; içeriklerine güvenme, erişim reddedilirse yenile ya da yeniden giriş iste.
Uygulama API'si
Taban adres https://generalappapi.nuvaka.com/api/oauth-api/, başlık Authorization: Bearer nvo_….
| Uç | scope | Açıklama |
|---|---|---|
GET me | — | { sub, username?, email?, language, scopes, folderId? } |
POST notifications | notifications.send | { title (1–100), message (≤ 500) }; kullanıcıda "Uygulama adı: başlık" olarak görünür, kullanıcı kapatabilir. Saatte 20, aşınca 429 rate_limited |
GET storage/items?folderId= | storage.folder | klasör içeriği (varsayılan: seçilen kök) |
GET storage/files/{fileId} | storage.folder | indirme, Range destekli |
POST storage/upload?folderId=&name= | storage.folder | ham gövde ≤ 100 MB; kullanıcının kotası geçerli |
DELETE storage/files/{fileId} | storage.folder | çöp kutusuna taşır |
Hatalar: geçersiz ya da süresi dolmuş token 401 invalid_token; izin yok 403 insufficient_scope; seçilen klasörün dışı 403 out_of_scope. Hesap silinir ya da engellenirse, istemci kapatılırsa veya kullanıcı erişimi kaldırırsa token anında geçersiz olur.
Güvenlik önerileri
state'i her istekte rastgele üret ve dönüşte karşılaştır;issparametresini (RFC 9207) doğrula.- Yalnız gerçekten kullandığın izinleri iste;
emailkapatılmış olabilir. - Token'ları işletim sisteminin anahtar deposunda sakla; günlüğe yazma.
- Kullanıcıya onay kodunu uygulamanda da göster; Nuvaka onay ekranında "Bu isteği sen başlatmadıysan onaylama" uyarısı bulunur.
Nuvaka Apps API v1 · son güncelleme 2026-09-28