我正在使用Firebase Unity SDK(5.4.3)。我需要该应用程序才能访问实时数据库。当我将访问权限配置为公共时,一切正常,但是我需要保护数据库的安全性,以便只能通过该应用程序进行读取/修改。
我按照此处的说明进行操作:https://firebase.google.com/docs/database/unity/start 用于允许编辑器“将SDK配置为使用服务帐户在Unity编辑器中运行”。这允许Unity编辑器访问数据库,但是在设备上不起作用。有用于验证用户身份的说明,但是我不希望在应用程序中进行任何形式的登录。
简而言之,我该如何允许通过该应用访问,但不允许在该应用外部访问。我可以在设备上使用服务帐户吗?该如何配置?
谢谢。
答案 0 :(得分:1)
正如Doug Stevenson所说,这是不可能的;您要么具有公共登录名,要么具有经过身份验证的受限登录名。
但是我只需要一个专用用户(如myUnityAppUser
)和密码(例如123456
在脚本中定义的某个位置,或者其他位置的加密文件。
然后自动进行登录,而无需用户交互->发送userName + password。密码仍然可以进行加密等,但这可以由应用本身来处理,而无需您主动进行每次登录
比您进行常规登录(例如, (Source)
public void Login(string email, string password)
{
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
{
if (task.IsCanceled)
{
Debug.LogError("SignInWithEmailAndPasswordAsync canceled.");
return;
}
if (task.IsFaulted)
{
Debug.LogError("SignInWithEmailAndPasswordAsync error: " + task.Exception);
if (task.Exception.InnerExceptions.Count > 0)
UpdateErrorMessage(task.Exception.InnerExceptions[0].Message);
return;
}
FirebaseUser user = task.Result;
Debug.LogFormat("User signed in successfully: {0} ({1})",
user.DisplayName, user.UserId);
SceneManager.LoadScene("LoginResults");
});
}
现在您只需在应用程序中的某个位置调用
Login ("myUnityAppUset@some.email", "123456");
具有某种方式的“硬编码”(也许已加密?)凭据。
请注意,仍有可能有人反编译该应用程序并再次作弊。
答案 1 :(得分:0)
这是不可能的。如果您想限制谁或什么人可以访问您的实时数据库(以及Cloud Storage和Firestore),则需要使用Firebase身份验证,并编写安全规则以将访问权限锁定为仅登录到您的应用程序/游戏的用户。
在不使用Firebase身份验证的情况下,对数据库的唯一访问实质上将是公开的-任何知道您项目名称的人。任何人都可以通过对您的应用程序/游戏进行反向工程并从中提取配置信息来找出项目的名称。该配置信息不是私人信息-本质上也是公共信息。