安全性通常是应用开发过程中最复杂的部分之一。在大多数应用中,开发者所构建和运行的服务器必须能够处理身份验证(用户是谁)和授权(用户可以做什么)这两大问题。 建立身份验证和授权机制本身就十分困难,要确保正确则更加困难,而这直接关系到您的产品能否取得成功。
Firebase Authentication 让您能够轻松验证用户身份,与之类似,面向 Cloud Storage 的 Firebase Security Rules 安全规则可以为您简化向用户授权和验证请求的工作。Cloud Storage Security Rules 允许您指定基于路径的权限,降低了复杂性。只需几行代码,您就可以编写出授权规则,用于限定能够发出 Cloud Storage 请求的用户身份,或限制上传文件的大小。
Firebase Realtime Database 具有类似的功能,称为 Firebase Realtime Database Security Rules
身份验证
了解您的用户是谁,这是构建应用时需要考虑的一个重要方面,Firebase Authentication 提供了一种易于使用且安全的纯客户端侧身份验证解决方案。面向 Cloud Storage 的 Firebase Security Rules 与 Firebase Authentication 相结合,可以实现基于用户的安全性。当使用 Firebase Authentication 对某个用户进行了身份验证后,Cloud Storage Security Rules 中的 request.auth
变量会变成一个包含该用户唯一 ID (request.auth.uid
) 和令牌 (request.auth.token
) 中所有其他用户信息的对象。当用户未通过身份验证时,request.auth
则为 null
。这可以让您针对每个用户安全地控制数据访问。如需了解详情,请参阅身份验证部分。
授权
识别用户只是保证安全的一部分。在知道用户的身份后,您需要一种方法来控制该用户对 Cloud Storage 中的文件的访问权限。
Cloud Storage 允许您指定基于文件和路径的授权规则(这些规则驻留在服务器上),以及确定对您应用中的文件的访问权限。例如,默认的 Cloud Storage Security Rules 安全规则需要借助 Firebase Authentication 才能对所有文件执行任何 read
或 write
操作:
service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
您可以前往 Firebase 控制台选择一个 Firebase 应用并查看“Storage”部分的 Rules
标签页,来修改这些规则。
数据验证
面向 Cloud Storage 的 Firebase Security Rules 也可用于数据验证,包括验证文件名和路径以及文件元数据属性(例如 contentType
和 size
)。
service firebase.storage { match /b/{bucket}/o { match /images/{imageId} { // Only allow uploads of any image file that's less than 5MB allow write: if request.resource.size < 5 * 1024 * 1024 && request.resource.contentType.matches('image/.*'); } } }