Flutter 中的 Firebase 身份验证和 API 访问

Zhe*_*Tan 5 access-token firebase firebase-authentication flutter

目前,我有以下几件事:

  1. 使用Asp.Net Core 2.1编写的API服务器。
  2. 使用flutter编写的移动应用程序。
  3. Firebase 身份验证用于对用户进行身份验证(允许电子邮件、Gmail 和 Facebook 登录)。

情况是这样的,我想要保护API,只有授权用户才能调用API服务,所以我必须配置API服务器以在startup.cs中添加授权,如下所示:

    public void ConfigureServices(IServiceCollection services)
    {
         services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.Authority = "https://securetoken.google.com/xxxxxxx";
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidIssuer = "https://securetoken.google.com/xxxxxx",
                    ValidateAudience = true,
                    ValidAudience = "xxxxxx",
                    ValidateLifetime = true
                };
            });
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
         app.UseAuthentication();
    }
Run Code Online (Sandbox Code Playgroud)

之后在控制器中使用[Authorize]属性来允许只有授权用户才能调用API。这就是我的 API 配置部分。

在移动应用程序客户端中,我使用firebase_authgoogle_sign_influtter_facebook_login包来执行 google、facebook 登录。

假设我将 Firebase Auth 与 Facebook 提供商一起使用,我的代码如下:

    final FirebaseAuth _auth = FirebaseAuth.instance;
    final GoogleSignIn _googleSignIn = new GoogleSignIn();
    final FacebookLogin facebookSignIn = new FacebookLogin();

    Future _testFacebookLogin() async {
        final FacebookLoginResult result = await facebookSignIn.logInWithReadPermissions(['email', 'public_profile']);

        switch (result.status) {
          case FacebookLoginStatus.loggedIn:
            final FacebookAccessToken accessToken = result.accessToken;
            final FirebaseUser user = await _auth.signInWithFacebook(accessToken: accessToken.token);
            assert(user.email != null);
            final FirebaseUser currentUser = await _auth.currentUser();
            assert(user.uid == currentUser.uid);
            //Perform API call here?
            break;
          case FacebookLoginStatus.cancelledByUser:

            break;
          case FacebookLoginStatus.error:

            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我能够登录并从 Facebook 获取访问令牌。我将访问令牌传递到 Firebase Auth,并且用户可以在 Firebase 下注册。

我的问题

  1. Firebase 会向我返回访问令牌和刷新令牌吗?我找不到任何访问令牌存储在 currentUser 变量中。
  2. 用户经过身份验证后,我应该将什么访问令牌(Facebook 或 Firebase)注入到授权标头中才能调用我的 API?