如何允许我的Unity应用程序在没有用户帐户且没有公共访问权限的情况下访问Firebase实时数据库?

时间:2019-01-08 20:47:02

标签: firebase unity3d firebase-realtime-database firebase-authentication

我正在使用Firebase Unity SDK(5.4.3)。我需要该应用程序才能访问实时数据库。当我将访问权限配置为公共时,一切正常,但是我需要保护数据库的安全性,以便只能通过该应用程序进行读取/修改。

我按照此处的说明进行操作:https://firebase.google.com/docs/database/unity/start 用于允许编辑器“将SDK配置为使用服务帐户在Unity编辑器中运行”。这允许Unity编辑器访问数据库,但是在设备上不起作用。有用于验证用户身份的说明,但是我不希望在应用程序中进行任何形式的登录。

简而言之,我该如何允许通过该应用访问,但不允许在该应用外部访问。我可以在设备上使用服务帐户吗?该如何配置?

谢谢。

2 个答案:

答案 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身份验证的情况下,对数据库的唯一访问实质上将是公开的-任何知道您项目名称的人。任何人都可以通过对您的应用程序/游戏进行反向工程并从中提取配置信息来找出项目的名称。该配置信息不是私人信息-本质上也是公共信息。