Cloud Storage için Firebase Security Rules, Firebase Authentication ile entegre olarak şunları sağlar: Cloud Storage için kullanıcı tabanlı güçlü kimlik doğrulama. Bu da Firebase Authentication jetonunun taleplerine göre ayrıntılı erişim denetimi.
Kullanıcı kimlik doğrulaması
Kimliği doğrulanmış bir kullanıcı Cloud Storage için bir istek gerçekleştirdiğinde
request.auth
değişkeni kullanıcının uid
değeriyle doldurulur
(request.auth.uid
) ve Firebase Authentication JWT ile ilgili iddialar
(request.auth.token
).
Ayrıca, özel kimlik doğrulama kullanılırken ek hak talepleri gösterilir
request.auth.token
alanına girin.
Kimliği doğrulanmamış bir kullanıcı istek gerçekleştirdiğinde request.auth
değişkeni
null
.
Bu veriler kullanılarak, güvenliği sağlamak için kimlik doğrulamayı kullanmanın dosyalar:
- Herkese açık:
request.auth
adlı kullanıcıyı yoksay - Kimliği gizli:
request.auth
değerininnull
olmadığından emin olun - Kullanıcı gizli:
request.auth.uid
değerininuid
yolu ile aynı olup olmadığını kontrol edin - Grup gizli: Özel jetonun iddialarını seçilen bir taleple eşleşecek şekilde kontrol edin veya Bir meta veri alanı olup olmadığını görmek için dosya meta verilerini okuma
Herkese açık
request.auth
bağlamını dikkate almayan tüm kurallar
Kullanıcının kimlik doğrulama bağlamını dikkate almadığı için public
kuralı.
Bu kurallar; oyun öğeleri, ses gibi herkese açık veriler ve
dosyaları veya diğer statik içerikleri kapsar.
// Anyone to read a public image if the file is less than 100kB // Anyone can upload a public file ending in '.txt' match /public/{imageId} { allow read: if resource.size < 100 * 1024; allow write: if imageId.matches(".*\\.txt"); }
Kimliği doğrulanmış gizli
Bazı durumlarda, kimliği doğrulanmış tüm kullanıcılar tarafından görüntülenebilir
tarafından değil, kimliği doğrulanmamış kullanıcılar tarafından gerçekleştirilmesine izin verilir. request.auth
tarihinden beri
değişkeni kimliği doğrulanmamış tüm kullanıcılar için null
olarak ayarlanırsa tek yapmanız gereken
request.auth
değişkeni, kimlik doğrulamayı zorunlu kılmak için mevcut:
// Require authentication on all internal image reads match /internal/{imageId} { allow read: if request.auth != null; }
Kullanıcıya gizli
Şu ana kadar request.auth
için en yaygın kullanım alanı, kullanıcılara
daha ayrıntılı izinlere sahip kullanıcılar: profil resimleri yüklemek
gizli dokümanları okumayı öğretiyor.
Cloud Storage klasöründeki dosyalar, dosyaya giden tam bir yola sahip olduğundan
bir dosyanın sahibi olan benzersiz, kullanıcıyı tanımlayan benzersiz bir
olduğunda kontrol edilebilecek dosya yolundaki bilgileri (kullanıcının uid
gibi)
kural değerlendirilir:
// Only a user can upload their profile picture, but anyone can view it match /users/{userId}/profilePicture.png { allow read; allow write: if request.auth != null && request.auth.uid == userId; }
Grubu gizli
Eşit derecede yaygın bir başka kullanım alanı da bir nesnede grup izinlerine izin vermektir. Örneğin, birkaç ekip üyesinin paylaşılan bir belge üzerinde ortak çalışmasına izin vermek gibi. Orada bunu yaparken kullanabileceğiniz çeşitli yaklaşımlar vardır:
- Firebase Authentication özel jeton bastırın bir grup üyesi hakkında ek bilgiler (grup kimliği gibi) içeren
- Grup bilgilerini (grup kimliği veya yetkili
uid
listesi gibi) dosya meta verileri
Bu veriler jetonda veya dosya meta verilerinde depolandıktan sonra verilere referans verilebilir. eklemek için şu seçeneği kullanın:
// Allow reads if the group ID in your token matches the file metadata's `owner` property // Allow writes if the group ID is in the user's custom token match /files/{groupId}/{fileName} { allow read: if resource.metadata.owner == request.auth.token.groupId; allow write: if request.auth.token.groupId == groupId; }
Tam örnek
Yaygın olarak kullanılan dört kimlik doğrulama kısıtlaması türüne ilişkin basit durumlar aşağıdaki örnekte:
service firebase.storage { match /b/{bucket}/o { match /images { // Anyone can view any image (no auth, publicly readable) match /{allImages=**} { allow read; } // Only authenticated users can write to "public" images match /public/{imageId} { allow write: if request.auth != null; } // Only an individual user can write to "their" images match /{userId}/{imageId} { allow write: if request.auth.uid == userId; } // Allow a "group" of users to read/write to shared images // An owner metadata property on the object contains the groupId for reads // A custom token has been minted with a groupId property for writes match /{groupId}/{imageId} { allow read: if resource.metadata.owner == request.auth.token.groupId; allow write: if request.auth.token.groupId == groupId; } } } }