İçeriğe atla
Supastack
TR
Tema
Giriş yapÖmür boyu erişim al
Tüm makaleler

Web Auth ve API'yi Paylaşan Chrome Uzantılı (MV3) Bir SaaS Nasıl Kurulur

Çoğu ekip tarayıcı uzantısı için ikinci bir arka uç kurar. Manifest V3 eşlikçinizi mevcut SaaS'ınıza workspace API anahtarlarıyla nasıl bağlayacağınız — çifte auth olmadan, ikinci veritabanı olmadan.

Noah Zixin Zhang2 dk okuma

SaaS'ınızla arka ucu paylaşan bir Chrome uzantısı nasıl kurulur?

İkinci bir arka uç kurmayarak. MV3 uzantısı HttpOnly cookie'lere güvenemez, bu yüzden workspace API anahtarlarıyla kimlik doğrulanır: uzantı, tam olarak bir workspace'e bağlı kapsamlı bir anahtarla uygulamanın sürümlenmiş REST API'sini (/api/v1) çağırır ve web uygulamasıyla aynı auth modelini, tenant kapsamını ve Postgres veritabanını yeniden kullanır. supastack'in MV3 iskeleti — popup, seçenekler sayfası, arka plan worker'ı, en-az-yetki manifestosu — tam olarak böyle bağlanmıştır.

Tuzak: farkında olmadan ikinci bir arka uç kurmak

Klasik hikâye: SaaS'ınızın sayfa yakalama, içerik kırpma veya web'e not ekleme için bir eşlikçi uzantıya ihtiyacı var. Altı ay sonra iki auth sistemi (web için cookie'ler, uzantı için el yapımı bir şey), uzantının gerçekten çağırabildiği paralel bir API ve aslında tek olması gereken iki veri deposunu hizalayan bir senkronizasyon katmanı sürdürüyorsunuz.

Bunların hiçbiri gerekli değil. Uzantı, mevcut ürününüzün bir istemcisidir — tutabileceği bir kimlik bilgisi ve programatik erişim için tasarlanmış bir API yeterli. Hata, ciddi bir SaaS'ın zaten sahip olduğu workspace API anahtarları ve sürümlenmiş REST yüzeyi yerine yeni bir arka uca uzanmaktır.

Manifest V3'ün gerçekte izin verdikleri

MV3, arka plan sayfalarını kısa ömürlü Service Worker'larla değiştirdi ve uzantıları en-az-yetki modeline itti. Pratikte: kalıcı bellek içi duruma güvenemezsiniz; oturum yeniden kullanımı için cookie kazıyamazsınız (HttpOnly cookie'ler zaten ulaşılamaz); ve her host izni web mağazası incelemesinde bir sorudur.

Temiz cevap, platformun zaten verdiğidir: chrome.storage.local'da kapsamlı bir kimlik bilgisi ve uygulamanızın origin'ine HTTPS çağrıları — kurulum anında isteğe bağlı host izinleriyle, kurulumda değil.

supastack'in MV3 iskeleti: zaten bağlı olanlar

supastack'in apps/extension'ı, tüm deseni uçtan uca gösteren kasıtlı olarak küçük, framework'süz bir Manifest V3 eşlikçisi — 'sayfayı workspace'e kaydet'. Etkin sekmenin başlığını, URL'sini ve seçili metnini, sürümlenmiş REST API POST /api/v1/content-entries üzerinden bir workspace içerik kaydı olarak kaydeder.

Auth, Settings → Developers altında oluşturulan bir workspace API anahtarı (sk_…) kullanır: anahtar tam olarak bir workspace'e bağlıdır, yani bağın kendisi workspace seçimidir — başka yere asla yazamaz. Seçenekler sayfası uygulama URL'sini ve anahtarı chrome.storage.local'da saklar, yalnızca o origin için erişim ister ve GET /api/v1/workspaces/current ile bağlantıyı doğrular.

apps/extension/
  manifest.json        MV3: service worker, least-privilege permissions
  src/
    background.js      context-menu save + badge feedback
    popup.html/.js     capture UI — title, URL, selection, note
    options.html/.js   app URL + workspace API key setup
    lib/
      api.mjs          versioned /api/v1 client (key auth)
      capture.mjs      active-tab + selection capture
      config.mjs       chrome.storage.local persistence

Varsayılan olarak en az yetki

İskelet yalnızca işin gerektirdiği minimum izin setini taşır — bu hem mağaza incelemesi hem kullanıcı güveni için önemlidir:

  • tabs yok, <all_urls> yok, cookies/webRequest/declarativeNetRequest yok — neye ihtiyacı olmadığını dürüstçe beyan eden bir iskelet.
İzinNedeni
activeTabGeçerli sayfanın başlığını/URL'sini yalnızca çağrıldığında okur
scriptingÇağrılan sekmedeki seçili metni okur
contextMenusSağ tık 'kaydet' menü öğesini kaydeder
storageUygulama URL'sini, API anahtarını ve workspace önbelleğini saklar
optional_host_permissionsUygulama origin'i kurulumda değil ayarlamada istenir — kurulumda sıfır site erişimi

İskeletten ürününüzün eşlikçisine

Yeniden markalama manifest.json'daki adı değiştirmektir; genişletme ise işin eğlenceli kısmı — ve aynı desenin içinde kalır: yeni yakalama türleri aynı anahtarla yeni /api/v1 uç noktalarını çağırır ve uygulamanın OpenAPI dokümanından üretilen tipli @supastack/api-sdk istek şekillerinin doğruluğunu korur.

Uzantı, diğer her istemci gibi aynı tenant-kapsamlı API üzerinden okuyup yazdığı için, kaydedilen sayfalar web panelinin listelediği aynı Postgres satırlarına düşer — tek veritabanı, tek auth modeli, workspaceId kapsamı tam olarak tek yerde zorlanır. İkinci arka uç yok, senkronizasyon yok, kayma yok. Kademeleri fiyat sayfasında karşılaştırın.

Kendin-yap ikinci arka uç yaklaşımısupastack MV3 iskeleti
AuthCookie'lerin yanında el yapımı token sistemiWorkspace API anahtarları — web ile aynı auth modeli
APIUzantı için icat edilmiş yeni uç noktalarSürümlenmiş /api/v1 + OpenAPI tipli SDK
Veriİkinci depo + senkronizasyon mantığıAynı Postgres satırları, workspace kapsamlı
İzinlerKolaylık için geniş erişimEn-az-yetki manifestosu, inceleme dostu

SSS: tek arka uçta SaaS + Chrome uzantısı

Geliştiricilerin uzantı eşlikçisi yayınlamadan önce sorduğu sorular:

  • Kullanıcının oturum cookie'si yerine neden API anahtarı?, HttpOnly cookie'ler tasarım gereği uzantı JS'sine görünmezdir ve MV3 Service Worker'ları kısa ömürlüdür — chrome.storage.local'daki kapsamlı bir sk_… anahtarı kalıcıdır, iptal edilebilir ve tek workspace'e bağlıdır; tenant sınırını asla aşamaz.
  • Uzantı Firefox'ta çalışır mı?, MV3 aynı yüzeyi destekler; kod browser ?? chrome ad alanı şimini kullanır ve Chromium öncelikli geliştirilir — Firefox bir porttur, yeniden yazım değil.
  • Kutudan çıkar çıkmaz mağazaya hazır mı?, Üretim desenlerinin iskeletidir, mağaza gönderisi değil — manifestoyu yeniden adlandırır, kendi yakalama mantığınızı ekler ve listeleme metnini yazarsınız. Zor kısım (auth, API, tenant kapsamı) hazır.
  • Hangi kademe uzantıyı içerir?, $299'luk Full Bundle beş yüzeyin tamamını — iki web motoru, Expo, Tauri ve uzantı iskeleti — tek repoda teslim eder.

Yeni ürününüz burada başlıyor.

Bir kez ödeyin. Kârlı ürünler geliştirmeye devam edin.