Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Firebase验证简单登录_C#_Firebase_Firebase Security_Firebasesimplelogin_Rest Firebase - Fatal编程技术网

C# Firebase验证简单登录

C# Firebase验证简单登录,c#,firebase,firebase-security,firebasesimplelogin,rest-firebase,C#,Firebase,Firebase Security,Firebasesimplelogin,Rest Firebase,TL;DR:有没有办法在Firebase中通过简单登录(电子邮件/密码)使用auth=CREDENTIALS 我正在尝试将我的C#应用程序的用户连接到我的Firebase。我可以使用我的秘密令牌设置几乎所有的呼叫,但现在我至少需要能够获取当前用户UID,以便知道数据应该发送到哪里 我的PUSH、PUT、GET请求是这样的,使用我的秘密令牌作为登录名: var authToken = "SECRET"; url = "https://MyLocation.firebaseio.com/" + ur

TL;DR:有没有办法在Firebase中通过简单登录(电子邮件/密码)使用
auth=CREDENTIALS

我正在尝试将我的C#应用程序的用户连接到我的Firebase。我可以使用我的秘密令牌设置几乎所有的呼叫,但现在我至少需要能够获取当前用户UID,以便知道数据应该发送到哪里

我的PUSH、PUT、GET请求是这样的,使用我的秘密令牌作为登录名:

var authToken = "SECRET";
url = "https://MyLocation.firebaseio.com/" + url + ".json?auth=" + authToken;
return WebRequest.Create(url);
但是现在我想得到一些支持电子邮件/密码简单登录的东西,比如:

var authToken = "{email:an@email.com, password:thePassword}";
url = "https://MyLocation.firebaseio.com/" + url + ".json?auth=" + authToken;
return WebRequest.Create(url);
我使用CURL的尝试没有成功。。。也许没有办法做到这一点?或者有什么建议


谢谢你的帮助

我和Firebase的支持人员交谈,找到了一个临时解决方案,一个真正的解决方案

真正的解决方案:使用Firebase作为“数据库”,在所有环境中手动管理用户及其密码。这基本上就是我想对我的问题做的。这是我们在使用中的决心

临时解决方案:(以及我所做的,因为我不需要像真正的解决方案那样多的安全性)

  • 获取标识当前用户的内容。在这里,我甚至不用问他就可以得到当前用户的电子邮件
  • Base64标识符:

    byte[] result = System.Text.Encoding.UTF8.GetBytes(email);
    email = Convert.ToBase64String(result);
    
  • 通过REST将所需信息放入、推送、修补到
    firebaseio.com/Base64

  • 在使用JavaScript的用户界面中,使用base64.min.js之类的程序在用户处执行相同的读/写数据过程

  • var ref=新Firebase(“https://aFirebase.firebaseio.com");
    //事情发生了
    ...
    //我们注册了一个用户
    函数createUser(电子邮件、密码){
    //允许我们在firebase中创建用户
    ref.createUser({
    电邮:电邮,,
    密码:密码
    },函数(错误,用户数据){
    如果(错误){
    //创建用户失败
    警报(错误);
    }否则{
    //用户创建成功
    log(“已成功创建uid为:,userData.uid的用户帐户”);
    //我们确保我们在火力基地的正确位置
    ref=ref.root().child(base64.encode(email));
    //我们检查孩子是否存在
    如果(ref==ref.root()){
    //这个孩子不存在
    //我们必须创造它
    用户={};
    //使用UID值设置子项,该值将符合规则
    用户[base64.encode(email)]={uid:userData.uid};
    //我们在firebase中为新来的孩子设定了价值观
    参考集(用户);
    }否则{
    //如果孩子存在,我们可以根据我们的规则更新他的信息
    ref.update({uid:userData.uid});
    }
    //谁想注册然后不登录?
    //如果他的电子邮件未经验证,我们可以在登录时添加一些内容。。。
    登录(电子邮件、密码);
    }
    }
    );
    }
    
  • 现在我们必须更新Firebase中的规则:


  • 这样,应用程序在某种程度上是安全的(只要用户使用C#应用程序和JS应用程序,规则将在其中设置)。

    对于WebApi应用程序,JWT令牌可以与OWIN管道一起使用

    app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
    {
        AuthenticationMode = AuthenticationMode.Active,
        AllowedAudiences = new[] { FirebaseValidAudience },
        Provider = new OAuthBearerAuthenticationProvider
        {
            OnValidateIdentity = OnValidateIdentity
        },
        TokenValidationParameters = new TokenValidationParameters
        {
            IssuerSigningKeys = issuerSigningKeys,
            ValidAudience = FirebaseValidAudience,
            ValidIssuer = FirebaseValidIssuer,
            IssuerSigningKeyResolver = (arbitrarily, declaring, these, parameters) => issuerSigningKeys
        }
    });        
    
    以下是Firebase ASP.NET WebApi身份验证应用程序的示例:

    app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
    {
        AuthenticationMode = AuthenticationMode.Active,
        AllowedAudiences = new[] { FirebaseValidAudience },
        Provider = new OAuthBearerAuthenticationProvider
        {
            OnValidateIdentity = OnValidateIdentity
        },
        TokenValidationParameters = new TokenValidationParameters
        {
            IssuerSigningKeys = issuerSigningKeys,
            ValidAudience = FirebaseValidAudience,
            ValidIssuer = FirebaseValidIssuer,
            IssuerSigningKeyResolver = (arbitrarily, declaring, these, parameters) => issuerSigningKeys
        }
    });