1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個贊
首先讓我先說 Firebase 并不意味著代表用戶從后端服務(wù)訪問(至少我是這樣認(rèn)為的)??蛻舳?SDK 用于在面向用戶的客戶端應(yīng)用程序中使用,服務(wù)器/管理 SDK 用于后臺和維護(hù)工作(如果 Firebase Cloud Functions 不夠用)。
如何使用來自 PHP 的電子郵件和密碼對用戶進(jìn)行身份驗(yàn)證,然后獲取可以被 javascript 進(jìn)一步使用的令牌?
“使用電子郵件和密碼登錄”功能目前在非官方 Firebase SDK for PHP中不可用(如果應(yīng)該的話,我會在腦海中反復(fù)思考??),但您可以使用自定義令牌來實(shí)現(xiàn):
<?php
use Kreait\Firebase\Factory;
$email = '...';
$password = '...';
$serviceAccount = '/path/to/service-account.json';
$factory = (new Factory())->withServiceAccount($serviceAccount);
$auth = $factory->createAuth();
$userRecord = $auth->verifyPassword($email, $password);
$customToken = $auth->createCustomToken($userRecord->uid);
然后,您可以將自定義令牌傳遞給您的 JavaScript 應(yīng)用程序并使用Auth.signInWithCustomToken()它。
在我擁有與 Firestore 等工具交互的足夠權(quán)限之前,F(xiàn)irebase 身份驗(yàn)證究竟是如何工作的?
在服務(wù)器端,服務(wù)帳戶用于對 Firebase API 的請求進(jìn)行身份驗(yàn)證。如果您按照官方文檔中的說明創(chuàng)建此類服務(wù)帳戶憑據(jù),則可以使用它來初始化服務(wù)器 SDK,并不受限制地訪問您的 Firebase。如果您隨后代表用戶執(zhí)行操作,您必須確保用戶之前已通過您的自定義應(yīng)用程序進(jìn)行了身份驗(yàn)證。
SDK 以及 Firestore 支持目前不提供“作為用戶”API 連接,但我正在努力。
在客戶端,客戶端 SDK 使用 API 密鑰進(jìn)行初始化(這不是秘密,您可以在例如啟用 Firebase 的 Web 應(yīng)用程序的 HTML 源代碼中找到它),但應(yīng)用程序根本無法與 Firebase 交互沒有任何形式的身份驗(yàn)證,至少是匿名身份驗(yàn)證。當(dāng)匿名身份驗(yàn)證時,不同類型的安全規(guī)則(存儲、實(shí)時數(shù)據(jù)庫、Firestore 等)的工作是確保匿名用戶不能與他們單獨(dú)的數(shù)據(jù)混淆。
為什么使用javascript進(jìn)行日志記錄(使用普通電子郵件和密碼)甚至是一件事?這不意味著每個人都可以看到所有憑據(jù)嗎?
我不確定我是否完全理解這個問題,但你是對的 - 如果記錄了秘密,這是一個問題,但在任何環(huán)境中。如果應(yīng)用程序開發(fā)人員在將憑據(jù)傳遞給 eg 之前將電子郵件/密碼組合推送到日志Auth.signInWithEmailAndPassword(),那么可以看到日志的每個人都將能夠捕獲它們。如果您在庫中發(fā)現(xiàn)此類日志語句,您絕對應(yīng)該通知庫開發(fā)人員,以便他們可以修復(fù)該問題。
我?guī)缀蹩梢钥隙阋呀?jīng)知道了,你的意思是別的,我只是想把它放在那里為了完整起見^^。
對于像這樣與服務(wù)器交互的javascript庫,服務(wù)器(Firestore)如何防止惡意者通過控制臺修改數(shù)據(jù)?一旦他們登錄,他們可以簡單地從控制臺向服務(wù)器發(fā)送命令,因?yàn)樗皇撬械?javascript。我對么?
以應(yīng)用程序用戶身份登錄后,該用戶將只能訪問通過定義的安全規(guī)則為他們啟用的應(yīng)用程序部分。對于您給出的安全規(guī)則,您是對的:這太寬松了,只要有人經(jīng)過身份驗(yàn)證,只要他們完全經(jīng)過身份驗(yàn)證,他們就可以讀寫(因此,這只會阻止訪問您的應(yīng)用程序而沒有驗(yàn)證。
如果您想確保用戶只能查看和更改他們自己的數(shù)據(jù),您可以使用如下規(guī)則:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents/{userId} {
match /{document=**} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
這只是一個例子,官方的 Firestore 安全文檔比我能做到的要全面得多^^。
應(yīng)用程序用戶既不能登錄項(xiàng)目的 Firebase 控制臺,也不能使用 Firebase CLI 工具。
- 1 回答
- 0 關(guān)注
- 285 瀏覽
添加回答
舉報