Kullanıcı verilerinin güvenliğini sağlayın

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ğerinin null olmadığından emin olun
  • Kullanıcı gizli: request.auth.uid değerinin uid 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;
      }
    }
  }
}