Preferences gets a "Default View Mode" choice: remember the last selection (the previous behaviour), smart grouping or flat list. A pinned view is applied at once and used after every refresh or reopen, while the top-right menu still switches the view temporarily. Choosing "remember" again keeps the view currently shown. Like the view itself, the choice is saved only in this browser. Closes #22
🔐 2FA
Cloudflare Workers üzerinde çalışan bir iki faktörlü kimlik doğrulama anahtarı yönetim sistemi. Ücretsiz dağıtım, dünya genelinde hızlandırılmış erişim ve PWA ile çevrimdışı kullanım desteği sunar.
简体中文 · 繁體中文 · English · 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Italiano · Русский · Türkçe · Bahasa Indonesia · Tiếng Việt · ไทย
Temel özellikler: Otomatik TOTP/HOTP kodu üretimi · QR kod tarama, görsel tanıma, ekran görüntüsü yapıştırma ve görsel sürükleyip bırakarak anahtar ekleme · AES-GCM 256 bit şifreli depolama · Google Authenticator, Aegis, 2FAS, Bitwarden ve diğer uygulamalardan toplu içe aktarma · Birden fazla biçimde dışa aktarma (TXT/JSON/CSV/HTML/Google taşıma QR kodları) · Otomatik yedekleme ve geri yükleme · WebDAV/S3/OneDrive/Google Drive ile uzak yedek senkronizasyonu · Güvenlik, senkronizasyon ve tercih ayarları · Proje genelinde 15 dil (otomatik algılama / elle seçim) · Açık, koyu ve sistem temasını izleyen modlar · Fluent 2'den esinlenen, farklı ekranlara uyumlu arayüz
Web uygulaması, tarayıcı eklentileri, ilk kurulum, herkese açık OTP sayfaları, API iletileri ve yedek belgeleri; Basitleştirilmiş Çince, Geleneksel Çince, İngilizce, Japonca, Korece, Almanca, Fransızca, İspanyolca, Portekizce (Brezilya), İtalyanca, Rusça, Türkçe, Endonezce, Vietnamca ve Taycayı destekler. Arayüzler tarayıcının dilini veya elle yapılan seçimi izler; desteklenmeyen tarayıcı dillerinde İngilizce kullanılır. CSV/HTML yedekleri farklı arayüz dilleri arasında içe aktarılabilir.
🧩 Tarayıcı eklentisi
2FA Verification Assistant'ı yükleyin: Chrome Web Store · Microsoft Edge Add-ons · Firefox Add-ons.
Yükleme bağlantısını ilgili tarayıcıda açın. Yükledikten sonra eklenti ayarlarına kendi barındırdığınız 2FA kurulumunun URL'sini girin ve TOTP kodlarını görüntülemek, kopyalamak ve doldurmak için aynı tarayıcıda bu kuruluma giriş yapın. Otomatik doldurma her web sitesi için izin gerektirir; bu izni o sitede ilk kez kod doldururken verebilirsiniz. Eklenti, bu projenin dağıtılmış bir kurulumunu gerektirir ve arayüzü yukarıda listelenen 15 dili destekler. Firefox masaüstü ve Android sürümleri için 153 veya üzeri ve normal sekmeler gerekir; masaüstündeki kapsayıcı sekmeleri ve her iki platformdaki özel sekmeler desteklenmez. Android için Firefox, mağazadaki 1.2.0 sürümünden itibaren desteklenir ancak henüz fiziksel bir cihazda test edilmemiştir. Android için Firefox, eklenti klavye kısayolları sunmaz.
Yükleme ve kullanım kılavuzu · Chrome / Edge gizlilik politikası · Firefox gizlilik politikası (Çince)
📸 Ekran görüntüleri
| Masaüstü | Tablet | Mobil |
|---|---|---|
![]() |
![]() |
![]() |
🚀 Hızlı dağıtım
Canlı demo
Demo sitesini ziyaret edin (parola: 2fa-Demo.): https://2fa-dev.wzf.workers.dev
Tek tıkla dağıtım (önerilen)
Tek tıkla dağıtım önerilir. Tüm kullanıcılar Sync Upstream iş akışıyla mevcut kurulumlarını yerinde yükseltmelidir. Worker'ı veya depoyu silerek ya da yeniden kurarak yükseltme yapmayın.
- Yukarıdaki düğmeye tıklayın, GitHub ile giriş yapın ve yetki verin
- Cloudflare hesabınıza giriş yapın, Deploy düğmesine tıklayın ve dağıtımın tamamlanmasını bekleyin (KV depolaması otomatik oluşturulur)
- Cloudflare'ın sağladığı Workers URL'sini açın, yönetici parolanızı belirleyin ve kullanmaya başlayın
Git üzerinden otomatik derleme, doğrudan depodaki
wrangler.tomldosyasını kullanır. Mevcut yapılandırmaSECRETS_KVbağlamasını açıkça tanımlar; Wrangler ilk dağıtımda gerekli KV'yi otomatik oluşturur ve sonraki dağıtımlarda mevcut Worker'a bağlı kaynağı kullanmaya devam eder. Cloudflare Dashboard'da Git derleme komutlarını elle yapılandırıyorsanız, sürüm bilgisinin eklenmesi sürecini korumak ve deponun varsayılan dağıtım giriş noktasıyla tutarlı kalmak için dağıtım komutu olarak doğrudannpx wrangler deployyerinenpm run deploykullanın.
Öneri: Veri şifrelemeyi etkinleştirin
Dağıtımdan sonra Cloudflare Dashboard → Worker → Settings → Variables altında ENCRYPTION_KEY adlı bir Secret ekleyin:
# Şifreleme anahtarı üretin (birini seçin)
openssl rand -base64 32
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
ENCRYPTION_KEY, mevcut verilerin şifresini çözmek için kullanılan ana anahtardır. Özgün değeri hemen bir parola yöneticisine, çevrimdışı yedeğe veya başka bir güvenli yere kaydetmek koşuluyla yapılandırılması önerilir.Özgün değerin saklandığından emin olamıyorsanız, anahtarı ayarlayıp kaybetmektense hiç ayarlamamak daha iyidir:
- Ayarlandığında: Gizli anahtar listesi, otomatik yedekler ve WebDAV/S3/OneDrive/Google Drive kimlik bilgileri şifrelenir
- Kaybedildiğinde: Cloudflare özgün değeri tekrar göstermez; mevcut şifreli veriler ve şifreli yedekler okunamaz veya geri yüklenemez
- Mevcut davranış: Şifreli veri algılandığında ancak
ENCRYPTION_KEYeksik olduğunda, eski verilerin yanlışlıkla üzerine yazılmasını önlemek için sistem okuma ve yazma işlemlerini kilitler
Sürüm güncellemeleri
Tek tıkla dağıtım bağımsız bir depo oluşturur (Fork değildir). Yükseltmeler Sync Upstream iş akışı kullanılarak mevcut kurulum üzerinde yapılır.
⚠️ Yükseltmeden önce her zaman verilerinizi yedekleyin: Sürüm güncellemesi yapmadan önce, olası bir hatada veri kaybını önlemek için Toplu dışa aktarma veya Yapılandırmayı geri yükle → Yedeği dışa aktar üzerinden mevcut verilerinizi dışa aktarın.
- Tek tıkla dağıtım sırasında GitHub hesabınızda oluşturulan 2fa deposunu açın
- Actions → Sync Upstream bölümüne gidin
- Run workflow düğmesine tıklayın, kaynak dalı varsayılan
mainolarak bırakın ve yeni bir çalıştırma başlatın - Senkronizasyonun ve Cloudflare'ın otomatik dağıtımının tamamlanmasını bekleyin, ardından uygulamayı yenileyin
İş akışı, deponuzun Worker adını, KV bağlamalarını ve yaygın dağıtım ayarlarını otomatik olarak korur ve aynı Worker'ı yeniden dağıtır. Deponuzdaki mevcut iş akışı dosyaları da korunur.
Sync Upstream yoksa: Tek tıkla dağıtım, depoyu içe aktarırken
.github/workflowsklasörünü kopyalamaz; bu nedenle yeni oluşturulan depoda iş akışı bulunmaz ve ilk yükseltmeden önce bu giriş dosyasının eklenmesi gerekir. Aşağıdaki bağlantıdaOWNER/REPOkısmını kendi deponuzla (örneğinalice/2fa) değiştirip tarayıcıda açın. GitHub dosya adını ve içeriğini doldurur; Commit changes düğmesine tıklayın:https://github.com/OWNER/REPO/new/main?filename=.github/workflows/sync-upstream.yml&value=%23%20Save%20as%20.github%2Fworkflows%2Fsync-upstream.yml%20in%20your%20repository.%0A%23%20The%20upgrade%20steps%20come%20from%20wuzf%2F2fa%2C%20so%20this%20file%20never%20needs%20updating.%0Aname%3A%20Sync%20Upstream%0A%0Aon%3A%0A%20%20workflow_dispatch%3A%0A%20%20%20%20inputs%3A%0A%20%20%20%20%20%20upstream_ref%3A%0A%20%20%20%20%20%20%20%20description%3A%20Upstream%20branch%20or%20tag%20to%20sync%0A%20%20%20%20%20%20%20%20required%3A%20false%0A%20%20%20%20%20%20%20%20default%3A%20main%0A%0Apermissions%3A%0A%20%20contents%3A%20write%0A%0Ajobs%3A%0A%20%20sync%3A%0A%20%20%20%20uses%3A%20wuzf%2F2fa%2F.github%2Fworkflows%2Fsync-upstream.yml%40main%0A%20%20%20%20with%3A%0A%20%20%20%20%20%20upstream_ref%3A%20%24%7B%7B%20inputs.upstream_ref%20%7D%7D%0A
.github/workflows/sync-upstream.ymldosyasını kendiniz oluşturup içeriğini https://github.com/wuzf/2fa/blob/main/.github/sync-upstream-entry.yml adresinden de kopyalayabilirsiniz. Giriş dosyası yalnızca birkaç satırdır; yükseltme adımları üst depodan gelir, bu yüzden hiç güncellenmesi gerekmez. Ardından yukarıdaki yükseltme adımlarını izleyin.
Önceki bir yükseltme
without workflows permissionhatasıyla başarısız olduysa: Düzeltme kaynak deponunmaindalında yayımlandığında, otomatik dağıtım yapılandırması birleştirme adımına sahip mevcut Sync Upstream iş akışları, YAML düzenlemeden veya PAT yapılandırmadan yukarıdaki adımlarla yükseltme yapabilir.mainile yeni bir çalıştırma başlatın; eski sürüm etiketleri düzeltmeyi içermez. Diğer durumlar için yükseltme sorunlarını giderme bölümüne bakın (Çince).
Bu yöntem mevcut Workers, KV bağlamaları veya Secrets üzerinde değişiklik yapmaz. ENCRYPTION_KEY daha önce ayarlandıysa yükseltme sırasında yeniden girmeniz gerekmez; ayarlamadıysanız da bu yükseltme yöntemini kullanabilirsiniz.
⚠️
ENCRYPTION_KEY, mevcut verilerin şifresini çözmek için kullanılan ana anahtardır. İlk oluşturulduğunda bir parola yöneticisine kaydettiğinizden emin olun. Cloudflare Secrets kaydedildikten sonra görüntülenemez; normal yükseltmelerde tekrar girilmeleri gerekmez, ancak özgün değeri kaydetmeden anahtarı silerseniz mevcut şifreli veriler kurtarılamaz.
⚠️ 1.8.0 öncesi bir sürüme geri dönme: 1.8.0'dan itibaren HOTP sayaç artışları ana veriden ayrı saklanır. Geri dönmeden önce sayaçları ana veriye geri yazmak için sıkıştırma uç noktasını bir kez çağırın; aksi halde HOTP sayaçları yükseltme anındaki değerlerine döner. Geri dönüş adımları bölümüne bakın (Çince). Yalnızca TOTP kullanan kurulumlar etkilenmez.
Birleştirme sonucunu kontrol etme
Sync Upstream iş akışı, yükseltmeleri her zaman aynı depoda ve aynı Worker üzerinde tamamlamak için tasarlanmıştır. İş akışı artık wrangler.toml dosyasını otomatik birleştirir ve özette kaynak depoyla olan farkları gösterir; böylece hangi değerlerin yerel dağıtım yapılandırmanızdan geldiğini doğrulayabilirsiniz:
- GitHub Actions çalıştırma özetinde
wrangler.tomlfarklarını kontrol edin - Deponuzdaki
wrangler.tomldosyasını açın - Worker adı, KV bağlamaları, rotalar ve mevcut dağıtım ayarlarının hâlâ doğru olduğunu doğrulayın
wrangler.tomliçinde çok özel yapılandırmalar kullanıyorsanız gereken ek commit'leri yapın
Cloudflare yeniden dağıtımı otomatik başlatmazsa Deployments sayfasına gidin ve mevcut deponuzun en son commit'ini yeniden dağıtın; silip yeniden kurmayın.
📖 Kullanım kılavuzu
Anahtar ekleme
Sağ alt köşedeki ➕ kayan düğmeye tıklayın:
- QR kod tara — Kamerayla 2FA QR kodlarını tarar ve alanları otomatik doldurur
- Görsel seç — QR kod ekran görüntüsü yükleyerek otomatik tanıma sağlar
- Ekran görüntüsü yapıştır — Panodaki QR kod ekran görüntülerini Ctrl+V ile yapıştırın (kamerası olmayan bilgisayar kullanıcıları için uygundur)
- Görsel sürükleyip bırak — QR kod görsellerini doğrudan iletişim kutusuna sürükleyerek otomatik tanıma sağlar
- Elle ekle — Hizmet adını ve Base32 gizli anahtarını girin (basamak sayısı, süre ve algoritmayı ayarlamak için gelişmiş ayarları açın)
Günlük kullanım
- Kodu kopyala: Doğrudan kodun rakamlarına tıklayın
- Anahtarları yönet: Kartın sağ üstündeki ⋯ simgesine tıklayın → QR kodu görüntüle / URI'yi kopyala / Sayfa bağlantısını kopyala / Düzenle / Sil
- Ara: Üstteki arama çubuğunda hizmet veya hesap adına göre anlık arama yapın
- Akıllı gruplama: İlgili hizmetler ve birden fazla hesap otomatik gruplanır; düz liste görünümüne dönme seçeneği vardır. Yenilemeden sonraki görünüm Tercihler'den sabitlenebilir
- Sırala: Eklenme zamanına veya ada göre sıralayın
- Tema: Kayan işlem düğmesi → Ayarlar → Tercihler → Tema modu, ardından açık, koyu veya sistemi izle seçeneğini belirleyin
Toplu içe aktarma
Kayan düğmeye → 📥 Toplu içe aktarma seçeneğine tıklayın; dosya içe aktarma ve metin yapıştırma desteklenir.
Uyumlu biçimler:
| Kaynak | Biçim |
|---|---|
| Genel | otpauth:// URI metni (TXT), CSV, HTML |
| Google Authenticator | Taşıma QR kodu (otpauth-migration://) |
| Aegis | JSON dışa aktarma dosyası |
| 2FAS | .2fas dışa aktarma dosyası |
| Bitwarden | JSON veya Authenticator CSV dışa aktarımı |
| LastPass Authenticator | JSON dışa aktarma dosyası |
| andOTP | JSON dışa aktarma dosyası |
| Ente Auth | Dışa aktarma dosyası |
Toplu dışa aktarma
Kayan düğmeye → 📤 Toplu dışa aktarma seçeneğine tıklayın; TXT, JSON, CSV ve HTML biçimleri ile Google Authenticator taşıma QR kodları oluşturma desteklenir (doğrudan içe aktarmak için taranabilir). Standart TXT / JSON / CSV / HTML dışa aktarımları çevrimiçiyken sunucunun birleşik biçimini tercih eder; çevrimdışıyken veya istek gövdesi çok büyük olduğunda otomatik olarak uyumlu yerel dışa aktarıma geçer.
Yedekleme ve geri yükleme
Sistem otomatik yedekleme yapar (veri değişikliklerinde ve günlük zamanlanmış kontrolde tetiklenir); en son 100 yedeği tutar (ayarlardan değiştirilebilir).
Yeni yedek dosyaları Ayarlar → Varsayılan dışa aktarma biçimi seçimini izler. Uzak otomatik yedekler de aynı uzantıyı (txt, json, csv veya html) kullanır.
Yedek listesini görüntülemek, içeriği önizlemek, geri yüklemek veya dışa aktarmak için kayan düğmeye → 🔄 Yapılandırmayı geri yükle seçeneğine tıklayın. WebDAV/S3/OneDrive/Google Drive'dan indirdiğiniz bir backup_*.(txt|json|csv|html) dosyasını da yükleyerek önizleyebilir ve geri yükleyebilirsiniz.
Uzak yedekleme
Yedeklerin uzak depolamayla senkronizasyonu desteklenir. Veri değişikliklerinde yedekler otomatik gönderilir ve birden fazla yedek hedefi yapılandırılabilir:
- WebDAV — Standart WebDAV protokolünü kullanan bulut sürücülerini veya kendi barındırdığınız hizmetleri destekler (⚠️ Nutstore/jianguoyun gibi Cloudflare vekili üzerinden çalışan hizmetler desteklenmez; 520 döngü hatalarına yol açarlar)
- S3 uyumlu depolama — AWS S3, Cloudflare R2, MinIO, Alibaba Cloud OSS ve diğer S3 uyumlu hizmetleri destekler
- OneDrive — Microsoft OAuth yetkilendirmesinden sonra yedekler, OneDrive'da uygulamaya ayrılmış klasörün içindeki bir alt klasöre yazılır
- Google Drive — Google OAuth yetkilendirmesinden sonra yedekler yapılandırılan Google Drive klasörüne yazılır
Uzak yedek hedeflerini Ayarlar → Senkronizasyon ayarları bölümünden ekleyip yönetin.
Uzak yedekler, uygulamanın oluşturduğu yedek içeriğinin aynısını saklar. Yedek oluşturulurken ENCRYPTION_KEY yapılandırılmışsa uzak dosya da şifreli metindir; geri yüklemek için Worker'da aynı ENCRYPTION_KEY değerinin korunması gerekir.
Ayrıntılı kurulum adımları: Bulut sürücüsü kurulumu (şu anda Çince).
Ayarlar
Kayan düğmeye → ⚙️ Ayarlar seçeneğine tıklayın:
- Parolayı değiştir — Yönetici parolasını değiştirin
- Tema modu — Açık, koyu veya sistemi izle seçeneğini belirleyin
- Kod geçiş animasyonu — Animasyonları kapatın ya da akış, çevirme veya spot ışığı seçin
- Oturum geçerliliği — JWT geçerlilik süresini özelleştirin
- Varsayılan dışa aktarma biçimi — Varsayılan dışa aktarma seçimini ve yeni oluşturulan yedeklerle uzak otomatik yedeklerin uzantısını belirler
- Saklanacak yedek sayısı — Otomatik yedeklerin saklanma sayısını ayarlayın
- Uzak yedekleme — WebDAV/S3/OneDrive/Google Drive yedek hedeflerini yapılandırın
- Çıkış yap — Geçerli oturum çerezini ve yerel önbelleği tek tıkla temizler; sunucuya ulaşılamadığında da yerel olarak çalışır
Mobil uygulama olarak yükleme (PWA)
- iOS: Safari'de açın → Paylaş düğmesi → Ana Ekrana Ekle
- Android: Chrome'da açın → Menü (⋮) → Ana ekrana ekle
Yükledikten sonra çevrimdışı erişim desteğiyle, yerel bir uygulama gibi tam ekranda kullanabilirsiniz.
Chrome / Edge / Firefox ile TOTP doldurma
Bir hesap seçmek için eklentiye tıklayın veya önceden bağlanmış bir hesabın geçerli TOTP kodunu doldurmak için Ctrl+Shift+U tuşlarına basın. Bir web sitesine izin verildiğinde eklenti o sitenin doğrulama alanlarını otomatik algılayıp doldurabilir; birden fazla eşleşme olduğunda hesap seçici gösterilir. Tek alanı veya 6/8 ayrı rakam alanını destekler ve formu göndermez.
Aynı tarayıcı profilinde 2FA kurulumuna giriş yaptıktan ve kurulum erişimine izin verdikten sonra kurulum sekmesini kapatabilirsiniz. Varsayılan olarak eklenti, geçerli oturum üzerinden gizli anahtarları okur ve her görev için kodları arka plan belleğinde hesaplar; oturum süresi dolduğunda yeniden giriş yapın. Çevrimdışı kullanımı açıkça etkinleştirmek, bağımsız bir yerel gizli anahtar önbelleği kaydeder; böylece ağ bağlantısı veya açık bir kurulum sekmesi olmadan kodlar kullanılabilir. Bu önbellek ek bir parolayla şifrelenmez. Yetkili eklenti kodu gizli anahtar listesinin tamamını okuyabilir, ancak gizli anahtarlar hiçbir zaman eklentinin açılır penceresine veya hedef siteye gönderilmez. Açık Shadow DOM ve aynı kökenli iframe alanları desteklenir; HOTP, farklı kökenli iframe'ler, kapalı Shadow DOM ve özel gezinme desteklenmez.
Yükleme ve kullanım kılavuzuna, Chrome / Edge gizlilik bildirimine ve Firefox gizlilik bildirimine bakın (şu anda Çince).
🔒 Güvenlik
- Parola: PBKDF2-SHA256 (100.000 yineleme) ile tuzlanmış özet; JWT, HttpOnly + Secure + SameSite=Strict çerezlerinde saklanır
- Veri şifreleme:
ENCRYPTION_KEYyapılandırıldığında tüm gizli anahtarlar, yedekler ve WebDAV/S3/OneDrive/Google Drive kimlik bilgileri AES-GCM 256 bit ile şifrelenir; özgün anahtarı mutlaka saklayın — kaybedilirse şifreli veriler çözülemez - İletim: Baştan sona HTTPS, TLS 1.2+
- Gizlilik: OTP istemci tarafında üretilir, kullanım verisi toplanmaz, tamamen açık kaynaklıdır
- Oturum geçerliliği: Varsayılan 30 gündür, ayarlardan özelleştirilebilir; etkin kullanımda otomatik yenilenir (7 günden az süre kaldığında otomatik uzatılır)
🔗 Herkese açık OTP API'si
Giriş yapmadan doğrudan URL üzerinden doğrulama kodları üretin:
https://your-worker.workers.dev/otp/YOUR_SECRET_KEY
https://your-worker.workers.dev/otp/YOUR_SECRET_KEY?digits=8&period=60
https://your-worker.workers.dev/otp/YOUR_SECRET_KEY?type=hotp&counter=5
Parametreler: type (totp/hotp), digits (6/8), period (30/60/120), algorithm (sha1/sha256/sha512), counter (HOTP için)
TOTP sayfaları hem geçerli hem de sonraki kodu gösterir; her ikisi de kopyalanabilir ve süre bittiğinde sayfa yenilenmeden güncellenir. HOTP sayfaları bağlantıda belirtilen sayacı kullanır; kopyalama sayacı artırmaz.
📚 Diğer belgeler
| Belge | Açıklama |
|---|---|
| Dağıtım kılavuzu | Elle dağıtım, KV yapılandırması, Secrets |
| Bulut sürücüsü kurulumu | OneDrive / Google Drive kurulum adımları (Çince) |
| API başvuru belgesi | Tüm API uç noktalarının belgeleri |
| Mimari | Sistem mimarisi ve teknik tasarım |
| Geliştirme kılavuzu | Yerel geliştirme, testler, kod biçemi |
| PWA kılavuzu | PWA kurulumu ve çevrimdışı özellikler |
| Tarayıcı eklentisi | Chrome / Edge / Firefox yükleme, kullanım ve izinler (Çince) |
🤝 Katkıda bulunma
Issue ve Pull Request gönderebilirsiniz. Geliştirme ayrıntıları için Geliştirme kılavuzuna bakın.
📄 Lisans
🌟 Yıldız geçmişi
Bu proje işinize yaradıysa lütfen bir ⭐ verin
wuzf tarafından ❤️ ile geliştirildi


