Ana içeriğe geç

Persona Kimliği ve Token'lar

ADR-0007 · backend/api/workstation.py, backend/services/persona_revocation.py, backend/api/deps.py, backend/services/oidc.py

Bir geliştirici persona iş istasyonunda çalışırken, platforma kısa ömürlü bir kimlikle bağlanır. Uzun ömürlü bir API anahtarı iş istasyonunda tutulmaz; sızarsa etkisi dakikalarla sınırlıdır ve anında iptal edilebilir.


İki token​

TokentypÖmürKullanım
Accesspersona~60 dkGateway ve /workstation/* çağrıları
Refreshpersona_refresh (aud=refresh)~12 saYeni access token almak

Her ikisinde de jti (benzersiz token kimliği) bulunur. 3pa login çifti alır ve ~/.config/3pa/session.json içine yazar; 3pa refresh access token'ı yeniler.


Endpoint'ler​

MethodYolKim
GET/workstation/personasSahip — yönetebildiği personalar
POST/workstation/persona-tokenSahip — bir persona için token çifti
POST/workstation/persona-token/refreshRefresh token sahibi
POST/workstation/persona-token/revokeSahip veya persona'nın kendisi
POST/workstation/oidc/exchangeOIDC ID token → persona token (opsiyonel)

İptal — fail-closed​

Her korunan istekte api/deps.py iptal kontrolü yapar. Kontrol fail-closed: DB'ye ulaşılamazsa istek reddedilir.

MekanizmaNe yapar
RevokedTokenBelirli bir jti kara listeye alınır
PersonaTokenStatePersona için bir not-before işareti — bu andan önce üretilmiş tüm token'lar geçersiz (toplu iptal)

revoke_jti() tek token'ı, revoke_all() bir persona'nın tüm token'larını iptal eder.


Otomatik bakım​

revocation_maintenance APScheduler işi:

  • Uzun süredir heartbeat göndermeyen (bayat) oturumların token'larını otomatik iptal eder.
  • Süresi çoktan dolmuş RevokedToken satırlarını temizler (tablo şişmesin).

OIDC (opsiyonel)​

services/oidc.py — kurumsal bir OIDC sağlayıcısının ID token'ını persona token'ına çevirir (JWKS ile imza doğrulama). oidc.enabled olmadıkça kapalı; tanımadığı bir kullanıcı için otomatik hesap oluşturmaz.


Açık konular​

  • Sandbox içinde 60 dakikadan uzun süren çalıştırmalar için token rotasyonu.
  • Cihaz kaydı — bilinen iş istasyonlarını bir cihaz kimliğiyle eşleme.