2015-03-24 13 views
38

Tôi có một ứng dụng được viết trên Firebase. Các quy tắc bảo mật và mã phía máy khách không đủ để làm cho ứng dụng của tôi hoạt động. Tôi cần phải kết nối với một máy chủ để làm một vài nhiệm vụ:Làm cách nào để bạn xác thực máy chủ với Firebase?

  • Dọn dẹp dữ liệu denormalized đó là thách thức để làm sạch bằng cách sử dụng onDisconnect handlers
  • Xây dựng chỉ số bổ sung dữ liệu của tôi mà đi xa hơn những gì tôi có thể làm với queries

Trả lời

81

Cập nhật (20160611): nếu bạn tạo dự án trên https://firebase.google.com, các bước truy cập cơ sở dữ liệu từ máy chủ khác nhau. Xem câu trả lời này: Is it still possible to do server side verification of tokens in Firebase 3?

Có hai cách bạn có thể thực hiện việc này: Tạo mã thông báo xác thực máy chủ hoặc sử dụng bí mật Firebase.

Tạo một máy chủ thẻ Bạn có thể sử dụng cùng một token generator libraries tạo cho Custom Đăng nhập để tạo ra thẻ mà bạn có thể sử dụng từ máy chủ của bạn. Sau đó, bạn có thể cung cấp quyền truy cập đặc biệt vào máy chủ này từ các quy tắc bảo mật của mình.

Sau đây là các bước sau:

  1. Lấy token generator library cho ngôn ngữ/nền tảng của máy chủ. Các máy chủ Node.js và Java có xu hướng hoạt động tốt nhất.
  2. Tạo mã thông báo có uid được chọn trước. Nếu bạn đang viết một máy chủ Node.js, mã có thể trông như thế này:

    var FirebaseTokenGenerator = require("firebase-token-generator"); 
    var tokenGenerator = new FirebaseTokenGenerator("<your-firebase-secret>"); 
    var token = tokenGenerator.createToken(
        {uid: "my-awesome-server"}, 
        { expires: <far_into_the_future_seconds> }); 
    
  3. Sử dụng thẻ để xác thực khách hàng của bạn. Dưới đây là mã node.js khác:

    var ref = new Firebase("https://<your-firebase>.firebaseio.com/"); 
    ref.authWithCustomToken(token, function(error, authData) { 
        ... 
    }); 
    
  4. Nếu không có khách hàng cho ngôn ngữ của máy chủ, ví dụ: PHP, sử dụng mã thông báo cho các yêu cầu REST của bạn dưới dạng auth parameter.

  5. Cập nhật quy tắc bảo mật của bạn để cấp quyền truy cập đặc biệt máy chủ của bạn, như được xác định bởi uid, giống như quy tắc đơn giản này cho phép truy cập đọc cho toàn bộ căn cứ hỏa lực

    { 
        "rules": { 
         ".write": false, 
         ".read": "auth.uid === 'my-awesome-server'" 
        } 
    } 
    
  6. Truy cập tất cả các dữ liệu, làm công cụ tuyệt vời .

Ưu

  • Đây là cách chính thức đề nghị căn cứ hỏa lực của để xác thực máy chủ của bạn.
  • Máy chủ của bạn sẽ tôn trọng các quy tắc xác thực.
  • Máy chủ chỉ là một người dùng khác. Bạn có thể sử dụng các quy tắc bảo mật để cung cấp quyền truy cập chi tiết cho dữ liệu của mình.
  • Vì quyền truy cập là hạt mịn nên không có lỗi trong máy chủ của bạn sẽ gây ra thiệt hại, chẳng hạn như xóa nút gốc của bạn.

căn cứ hỏa lực bí mật

Nếu bạn là loại phát triển những người thích sống trên các cạnh, và các loại sudo tại thả của một chiếc mũ, bạn cũng có thể xác thực bằng bí mật căn cứ hỏa lực của bạn trực tiếp.

Nhưng nghiêm túc, đừng làm điều này. Nguy hiểm.

Lý do không phải làm điều đó

  • Cũng giống như một cách mù quáng sử dụng sudo, nó là vô cùng nguy hiểm.
  • Máy chủ của bạn sẽ không tôn trọng các quy tắc xác thực của bạn.
  • Máy chủ của bạn đọc đầy đủ /ghi quyền truy cập vào Firebase của bạn. Nếu nó có một lỗi đủ tồi tệ, nó có thể xóa hoặc làm hỏng dữ liệu không có quyền truy cập kinh doanh.
  • bí mật của bạn kết thúc ở nhiều nơi hơn (có thể trong nhật ký yêu cầu gửi đi, v.v.). Bạn sẽ tiếp xúc với nhiều rủi ro hơn nếu nó ra ngoài.
+2

câu trả lời này không có đủ upvotes –

+1

Đây là một bản sao tốt của: https://www.firebase.com/docs/web/guide/login/custom.html nhưng thực sự mở rộng trên một số điểm có giá trị. – arcseldon

+0

Một liên kết hữu ích khác tại đây: https://www.firebase.com/docs/security/quickstart.html – arcseldon

Các vấn đề liên quan