WhatsApp, Geçiş Anahtarlarıyla 1 Milyar Kullanıcıya Nasıl Güvenli ve Sorunsuz Oturum Açma Deneyimi Sundu?
Okuma süresi: 8 dk.
WhatsApp, dünya genelinde milyarlarca kullanıcıya hizmet veren, dünyanın en büyük mesajlaşma platformudur. Farklı bölgelerdeki kullanıcılar için varsayılan iletişim aracı olan WhatsApp, özel, güvenilir ve güvenli mesajlaşma imkanı sunar.
"Beni en çok heyecanlandıran şey, WhatsApp'ın etkisinin muazzam ölçeği. WhatsApp'ta yapılan küçük bir iyileştirme bile dünya genelinde milyarlarca kullanıcıyı etkiliyor." diyor.
Bu büyüklükte bir kitle için ürün geliştirirken çok çeşitli ağ koşulları, cihaz özellikleri ve dijital okuryazarlık seviyeleriyle başa çıkmak gerekir. Bu potansiyeli erkenden fark eden WhatsApp, 2023'te geçiş anahtarlarını kullanmaya karar vererek bu teknolojiyi entegre eden ilk büyük tüketici uygulamalarından biri oldu. WhatsApp, geçiş anahtarlarını uygulayarak kimlik avına karşı dayanıklı ve hızlı bir seçenek sunmayı amaçladı. Bu seçenek, kullanıcıların yaşadığı zorlukları önemli ölçüde azaltırken hesapların ele geçirilmesine ve kimlik bilgisi hırsızlığına karşı güçlü bir koruma sağlıyor.
Geçiş Anahtarlarını Kullanma Kararı
WhatsApp'ta birden fazla erişim yöntemi sunmak, kullanıcıların bağlantıda kalmasını ve gerektiğinde erişimi yeniden kazanmasını kolaylaştırmak açısından çok önemlidir. Geçiş anahtarları, kullanıcılara tek dokunuşla kolay bir giriş deneyimi sunar. Bu sayede kimlik avı riskleri ortadan kalkar ve OTP mesajlarının tutarsız bir şekilde gönderilebildiği bölgelerde bile güvenilir bir şekilde çalışır.
Geçiş anahtarları, manuel giriş yerine biyometrik veya ekran kilidi kimlik doğrulamasını kullanmak için açık-gizli anahtar kriptografisinden yararlanır. Bu iş akışı, süreci tek bir dokunuşa indirerek oturum açma hızını önemli ölçüde artırır. Bu işlem, kullanıcıların uygulama bağlamında etkileşimde kalmasını sağlayan birleşik bir alt sayfa arayüzü üzerinden gerçekleştirilir. Geçiş anahtarları iki açıdan fayda sağlar: Kullanıcılara kolaylaştırılmış bir giriş deneyimi sunarken aynı zamanda kimlik avı saldırılarına karşı güçlü ve yerel koruma sağlar. En önemlisi, geleneksel SMS OTP gönderiminin tutarsız olabileceği bölgelerde bile güvenilir bir şekilde çalışırlar.
Güçlü ve çeşitli hesap erişim yöntemleri, kullanıcıların kendileri için en önemli olan şeylere erişimlerini kaybetmemelerini sağlar.
İstemci tarafı entegrasyon
WhatsApp geliştiricileri açısından Credential Manager API, temel kimlik bilgisi sağlayıcıların karmaşıklığını ortadan kaldıran temiz ve birleşik bir arayüz sağladı. İlk entegrasyon akışları belirlendikten sonra API yüzeyi, iyi tanımlanmış istek ve yanıt kalıplarını izleyen kimlik bilgisi oluşturma ve alma işlemleriyle basit hale geldi. Uygulama kılavuzunu Android geliştirici belgelerinde bulabilirsiniz.
İdeal yol başlangıçtan itibaren çalışsa da OEM'ler, birden fazla Android sürümü ve çeşitli cihaz yapılandırmaları (ör. yalnızca PIN'e karşı biyometrik veya Android 13'e karşı 14+) genelinde çeşitli bir kullanıcı tabanında gezinmek, daha önce görülmemiş uç durumları ortaya çıkardı. Bunlar arasında ekran kilidi olmayan kullanıcılar, beklenmedik istisna türleri, güncel olmayan Play Hizmetleri ve tutarsız kimlik bilgisi sağlayıcı davranışı yer alıyordu.
WhatsApp ve Google ekipleri, bu engelleri aşmak için yakın bir işbirliği yaparak çeşitli zorlukların üstesinden geldi:
- Kimlik bilgisi arama akışını optimize etme: İlk arama akışında, özellikle henüz geçiş anahtarı oluşturmamış kullanıcılar için gecikme süresi yüksekti. WhatsApp kullanıcılarının çoğu ilk aşamalarda bu grupta yer aldığından, bu durum neredeyse her oturum açma işleminde fark edilir bir gecikmeye neden oldu. WhatsApp, arama yolunu ölçüp darboğazları birlikte tespit ederek süreci önemli ölçüde hızlandırdı ve tüm Android ekosistemine fayda sağlayan performans kazanımları elde etti.
- Geçici durumları yönetme: WhatsApp, şifre yöneticisinin kullanılabilirliği, ekran kilidinin yapılandırılmamış olması, aralıklı bağlantı sorunları, uyumsuz donanım, güncel olmayan Play Hizmetleri gibi cihaza özgü engelleri aşmak için kapsamlı bir hata işleme katmanı oluşturdu ve istisnaları kurtarılabilir ve terminal durumları olarak kategorize etti. Bu sayede, geçiş anahtarı akışı tamamlanamadığında sistem, kullanıcıyı bozuk bir durumda bırakmadan geleneksel kimlik doğrulamaya güvenli bir şekilde geri dönerek kontrollü azalma sağladı.
- İşletim sistemine özgü istisnaları yönetme: Telemetri, belirli Android 13 cihazlarda GetPublicKeyCredentialDomException (Kimlik bilgisi şifresi çözülemedi) ve Android 14'te geçiş anahtarı oluşturma sırasında CreatePublicKeyCredentialDomException (Senkronizasyon hesabı alınamadı) gibi cihaza özgü engelleri ortaya çıkardığında Google ve WhatsApp ekibi, temel nedenleri araştırdı ve daha sorunsuz oluşturma akışları sağlamak için platform düzeyinde iyileştirmeler yaptı. Kimlik Bilgisi Yöneticisi ile ilgili yaygın hata kodlarını ve açıklamalarını listeleyen, nedenleri hakkında bilgi veren kapsamlı hata kılavuzunu burada bulabilirsiniz.
| Not: Daha fazla bilgi için Geçiş anahtarlarıyla ilgili en iyi uygulamalar blogunu inceleyerek geçiş anahtarlarını kullanırken kullanıcı deneyimini nasıl optimize edeceğinizi öğrenin. |
Kullanıcı deneyimini iyileştirme
Geçiş anahtarları 2023'ün başlarında tamamen yeni bir kavram olduğundan, oluşturulmalarını istemek için yerleşik kalıplar yoktu. WhatsApp, kapsamlı A/B testleri aracılığıyla en çok fayda sağlayacak kullanıcıları hedefleyen bağlamsal bir çerçeve geliştirdi. Bu strateji sürekli olarak gelişti: Android OS akışları daha akıcı ve tek ekranlı bir deneyime dönüştükçe WhatsApp, gereksiz veya kafa karıştırıcı kullanıcı arayüzünden kaçınmak için kendi istemlerini basitleştirdi.
Sunucu Tarafı Mimarisi ve Platformlar Arası Engeller
Arka uçta, WhatsApp'ın sunucusu standart WebAuthn/FIDO2 protokollerini uygular. Arka uç, Erlang dilinde yazılmıştır ve yerel bir arayüz üzerinden Rust webauthn-rs kitaplığını çağırır. Bu Rust kitaplığı, imza doğrulama ve kimlik bilgisi ayrıştırma işlemlerini gerçekleştirir. Böylece dahili kod; düzenleme, depolama ve uygunluk, sıklık sınırlaması ve kimlik bilgisi yaşam döngüsü gibi ürün kurallarına odaklanabilir.
Sunucu mimarisi, bu temel işlemleri dört ana giriş noktası üzerinden yönetir. Bu giriş noktaları, hem kayıt hem de kimlik doğrulama için Begin ve Finish dizileri halinde eşleştirilir:
1. Geçiş anahtarı kaydı
Bu sıra, istemciye oluşturma seçenekleri sunma, istemci başarılı oluşturma işlemini onayladıktan sonra onayı doğrulama ve kimlik bilgilerini güvenli bir şekilde saklama işlemlerini gerçekleştirir.
Erlang: Kaydı Başlatma
begin_registration(UserId) ->
Existing = list_credentials(UserId),
%% reuse the existing user handle, or mint a new one
{UserHandle, IsNew} = user_handle(Existing),
%% returns the client creation options and the server-side challenge state
#{client_safe := CreationOptions, server_only := ChallengeState} =
webauthn:start_registration(UserId, UserHandle, rp_config()),
%% excludeCredentials: the user's existing credential IDs, so the device won't re-enroll one
Options = with_exclude_credentials(CreationOptions, credential_ids(Existing)),
store_challenge(UserId, ChallengeState), %% short TTL
IsNew andalso reserve_user_handle(UserId, UserHandle),
Options.- Kullanıcıyı tanımlama: Sunucu, mevcut bir kullanıcı tanıtıcısını yeniden kullanmak veya yeni bir tanıtıcı oluşturmak için önce mevcut kimlik bilgilerini kontrol eder.
- Seçenekleri ve sorgulamayı oluşturma: İstemci için oluşturma seçeneklerini ve sunucu için güvenli bir sorgulama durumunu oluşturmak üzere WebAuthn kitaplığını çağırır.
- Yinelenenleri önleme: Kullanıcının mevcut kimlik bilgisi kimliklerini açıkça hariç tutar. Böylece cihaz, kayıtlı bir geçiş anahtarını yanlışlıkla yeniden kaydetmez.
- Sorgulamayı depolama: Sunucu, sorgulamayı kısa bir geçerlilik süresiyle (TTL) geçici olarak depolar ve seçenekleri istemci cihazına geri gönderir.
Erlang: Kaydı Tamamlama
finish_registration(UserId, Attestation) ->
ChallengeState = get_challenge(UserId), %% must exist and be unexpired
#{credential_id := CredId, public_key := PubKey} =
webauthn:finish_registration(Attestation, ChallengeState, rp_config()),
ok = index_credential(CredId, UserId), %% map credential_id -> account
case multi_passkey_enabled(UserId) of
true -> add_credential(UserId, CredId, PubKey); %% append (oldest evicted past the cap)
false -> replace_credential(UserId, CredId, PubKey) %% single-passkey mode
end,
notify_client(UserId, {passkey_created, CredId}),
ok.- Sorgulamayı alma: Sunucu, depolanan sorgulamayı alır ve hâlâ mevcut olduğundan ve süresinin dolmadığından emin olur.
- Onaylama doğrulama: İstemcinin yanıtını (onaylama) ve sorgulamayı WebAuthn kitaplığına ileterek isteği doğrular ve yeni kimlik bilgisi kimliği ile ortak anahtarı ayıklar.
- Kimlik bilgisini dizine ekleme: Yeni kimlik bilgisi kimliği, daha sonra hızlı arama için doğrudan kullanıcının hesabıyla eşlenir.
- Sınırları kaydetme ve yönetme: Çoklu geçiş anahtarı özelliğinin etkin olup olmamasına bağlı olarak sunucu, yeni kimlik bilgisini kullanıcının listesine ekler (sınıra ulaşılırsa en eski kimlik bilgisini kaldırır) veya tek geçiş anahtarı modunda mevcut kimlik bilgisini değiştirir.
2. Kimlik Bilgisi Doğrulama
Oluşturma işlemine benzer şekilde, uygulama sunucusu giriş sırasını düzenleyerek kimlik doğrulama akışını yönetir. Bu, başarılı istemci kimlik doğrulamasından sonra onayın doğrulanmasını ve WebAuthn yenileme gerektiğine dair sinyal verdiğinde depolanan kimlik bilgilerinin dinamik olarak güncellenmesini içerir.
Erlang: Kimlik Doğrulamayı Başlatma
begin_authentication(UserId) ->
Credentials = list_valid_credentials(UserId),
#{client_safe := RequestOptions, server_only := ChallengeState} =
webauthn:start_authentication(Credentials, rp_config()),
store_challenge(UserId, ChallengeState), %% short TTL
RequestOptions.- Geçerli kimlik bilgilerini getirme: Sunucu, kullanıcıyla ilişkili geçerli tüm kimlik bilgilerini arar.
- Sorgulama oluşturma: Bu kimlik bilgilerini kullanarak istemci için istek seçenekleri oluşturur ve yeni bir sunucu tarafı sorgulaması oluşturur.
- Depolama ve döndürme: Kayıt işleminde olduğu gibi, sorgu geçici olarak kaydedilir ve istek seçenekleri istemci uygulamasına iletilir.
Erlang: Kimlik Doğrulamayı Tamamlama
finish_authentication(UserId, Assertion) ->
ChallengeState = get_challenge(UserId),
Credentials = list_valid_credentials(UserId),
case webauthn:finish_authentication(Credentials, Assertion, ChallengeState) of
#{user_verified := true, credential_id := CredId, needs_update := NeedsUpdate} = Result ->
%% webauthn tells us when the stored credential should be refreshed
NeedsUpdate andalso refresh_credential(UserId, CredId, Result),
mark_credential_used(UserId, CredId),
{ok, CredId};
_ ->
{error, not_allowed}
end.- Onaylama doğrulama: Sunucu, depolanan sorguyu ve geçerli kimlik bilgilerini alır, ardından WebAuthn kitaplığından istemcinin onaylamasını doğrulamasını ister.
- Gerekirse yenileme: Kullanıcı başarıyla doğrulanırsa sunucu, needs_update işaretini kontrol eder. WebAuthn kitaplığı, depolanan kimlik bilgisi durumunun sunucuda yenilenmesi gerekip gerekmediğini belirtmek için bu işareti kullanır.
- Sonlandırma: Sunucu, kimlik bilgisini kullanılmış olarak işaretler ve giriş işlemini başarıyla tamamlar.
Sunucu kaydı hakkında daha fazla bilgi edinmek için buradaki entegrasyon kılavuzunu inceleyin.
Gelişmiş Mimari Konular
Geçiş anahtarlarını sunucuda geniş ölçekte uygulamak, özellikle hesap mimarisi ve cihaz senkronizasyonuyla ilgili benzersiz zorluklar ortaya çıkardı. WhatsApp arka uç ekibinden Ashish Choudhary, karşılaştıkları başlıca zorlukları vurguladı:
- Hesap başına birden fazla geçiş anahtarına geçiş: WhatsApp'ın eski sunucu mantığı, kullanıcı başına tek bir kimlik bilgisi varsayımıyla derinden bağlantılıydı. Modern çeşitli cihaz gerçeklerini desteklemek için, sınıra ulaşıldığında en eski kimlik bilgisini akıllıca çıkaran sınırlı bir liste sistemi tasarladılar. Mutlak kararlılık sağlamak için bu büyük yapısal değişiklik, titiz denemelerle kademeli olarak kullanıma sunuldu.
- Kimlik bilgisi yaşam döngüsünü dengeleme: Kimlik bilgisi geçerliliğini yönetmek hassas bir yaklaşım gerektiriyordu. Kimlik bilgilerinin çok agresif bir şekilde geçersiz kılınması gereksiz yeniden kayıtlara neden olurken, çok esnek davranılması eski kimlik bilgilerinin birikmesine yol açar. WhatsApp, kullanıcıları rahatsız etmeden sıkı güvenlik önlemleri uygulamak için dengeli yaşam döngüsü durumları uygulayarak bu sorunu çözdü. Bu durumlar, etkin olmayan geçiş anahtarları için otomatik arka plan temizleme özelliğiyle desteklendi.
Cihazlar Arası Senkronizasyonu Yeniden Değerlendirme
Bu güçlü çoklu geçiş anahtarı mimarisi, WhatsApp'ın platformlar arası kullanılabilirliği tamamen yeniden düşünmesine de olanak tanıdı. Standart WebAuthn cihazlar arası akış, bir cihazda QR kodunun taranmasını ve başka bir cihazda Bluetooth üzerinden kimlik doğrulaması yapılmasını gerektirir. Ancak WhatsApp, Bluetooth bağımlılığının güvenilir olmadığını tespit etti ve kullanıcılar genellikle yeni QR kodlarını mevcut WhatsApp Web bağlantı işlemiyle karıştırdı.
WhatsApp, kullanıcıları hassas bir cihazlar arası aktarım mekanizması kullanmaya zorlamak yerine, geçiş anahtarlarını Android'de Google Şifre Yöneticisi ve iOS'te iCloud Anahtar Zinciri gibi birden fazla ekosistemde yerel olarak saklamalarına olanak tanır. Kullanıcılar yeni bir platforma geçtiklerinde bir sonraki oturum açma işlemlerinde yeni bir geçiş anahtarı oluştururlar. Bu yaklaşım, kullanıcı için tamamen sorunsuzdur ve yeni çoklu geçiş anahtarı sunucu altyapısında sorunsuz bir şekilde çalışır.
Gelecekte
WhatsApp, geçiş anahtarlarını kullanıma sunduktan sonra geniş kullanıcı tabanında güçlü bir organik benimseme oranı elde etti. Uygulama, geleneksel çok adımlı oturum açma sürecini tek ve sorunsuz bir biyometrik harekete dönüştürerek kullanıcı deneyimini önemli ölçüde iyileştirdi. WhatsApp, bu ivmeden yararlanarak geçiş anahtarı kullanımını ilk oturum açma işlemlerinin ötesine taşıyor ve geçiş anahtarıyla şifrelenmiş yedeklemeler gibi hassas hesap işlemleri için sorunsuz uygulama içi yeniden kimlik doğrulama özelliğini araştırıyor.
WhatsApp, geleceğe yönelik olarak platform iş ortaklarıyla aktif bir şekilde işbirliği yaparak daha az sorunlu kimlik bilgisi oluşturma yollarına öncülük ediyor ve cihazların biyometrik özellikleri genişledikçe giriş engellerinin doğal olarak azalacağını öngörüyor.
Geniş ölçekte uygulama geliştirenler için öneri
WhatsApp ekibi, geçiş anahtarlarını geniş ölçekte entegre etmeye hazırlanan geliştiriciler için şu önemli önerileri paylaşıyor:
- Hata sınıflandırmasına erken yatırım yapın: Çok çeşitli Kimlik Bilgisi Yöneticisi istisnalarını kurtarılabilir ve terminal durumları olarak kategorilere ayırın ve her senaryo için net, düzgün yedek yollar tanımlayın.
- Uygunluk dönüşüm huninizi anlama: Ekran kilidi varlığı, biyometrik donanım ve Play Hizmetleri sürümleri gibi cihaz özellikleri kontrollerini uygulayın ve uygun olmayan kullanıcıları akışın ortasında başarısız olmak yerine proaktif olarak hariç tutacak akışlar tasarlayın.
- Uygulamanızı yedek yönteme hazırlayın: Geçiş anahtarlarını, uygun cihazlar için en iyi birincil kimlik doğrulama yöntemi olarak kullanın ancak geleneksel yöntemleri her zaman güvenilir ve evrensel bir yedek yöntem olarak saklayın.
- İşletim sistemi sürümü parçalanması için plan yapın: Geçiş anahtarı davranışı işletim sistemlerine göre farklılık gösterebilir. Android 13, 14 ve 15 ve sonraki sürümlerde kapsamlı testler yapın ve kimlik bilgisi seçimi kullanıcı arayüzünde OEM'e özgü varyasyonları hesaba katın.
- Bağlama göre ek satış yapın ve kullanıcıları bilgilendirin: Güvenlikle ilgili işlemler sırasında geçiş anahtarı oluşturma seçeneğini doğal bir şekilde sunun. Kullanıcıların benimsemesini sağlamak için erişilebilir bir dil kullanarak değer teklifini (hız ve güvenlik) net bir şekilde vurgulayın.
- Proaktif olarak izleyin: Ekosistem her işletim sistemi güncellemesiyle gelişir. Değişen cihaz ortamlarına ayak uydurmak için gecikme ve hata kalıplarını sürekli olarak takip edin.
Geçiş Anahtarları ve Kimlik Bilgisi Yöneticisi'ni Kullanmaya Başlama
Entegrasyon kılavuzumuzu ve herkese açık örnek kodumuzu kullanarak Android'de geçiş anahtarlarını ve Kimlik Bilgisi Yöneticisi'ni kullanmaya başlayın.
Sorularınız veya sorunlarınız varsa Android Kimlik Bilgileri sorun izleyicisi üzerinden bizimle paylaşabilirsiniz.
-
Başarılı ÖrneklerUber, yeni cihazlarda oturum açma sürecini kolaylaştırmak için Android Restore Credentials API'yi kullandı. Bu sayede, yılda 4 milyon manuel girişin azalacağını ve kullanıcıları elde tutma oranının artacağını öngörüyor.
Niharika Arora, Tracy Agyemang • Okuma süresi: 5 dk. -
Başarılı ÖrneklerFlaş haberlerden eğlenceye, spordan siyasete kadar her konuda içerik sunan X, dünya genelinde yaklaşık 500 milyon kullanıcının canlı yorumlarla tüm hikayeyi öğrenmesine yardımcı olmayı amaçlayan bir sosyal medya uygulamasıdır.
Niharika Arora, Tracy Agyemang • Okuma süresi: 3 dk. -
Başarılı ÖrneklerGüneydoğu Asya'nın önde gelen süper uygulaması Grab, tek bir uygulama üzerinden sekiz ülkedeki milyonlarca kullanıcıya teslimat, mobilite ve finansal hizmetler sunuyor.
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • Okuma süresi: 5 dk.
Android geliştiriciliğiyle ilgili en son analizleri her hafta gelen kutunuza alın.