目前,我有以下事项:

  • 使用Asp.Net Core 2.1编写的API服务器 .

  • 使用flutter编写的移动应用程序 .

  • 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();
    }

之后,在控制器中使用[Authorize]属性,只允许授权用户调用API . 这一切都是我的API配置部分 .

在移动应用客户端,我使用firebase_authgoogle_sign_influtter_facebook_login包执行谷歌,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;
        }
    }

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

My Questions

  • Firebase会返回一个访问令牌并刷新令牌吗?我找不到任何访问令牌存储在currentUser变量中 .

  • 用户通过身份验证后,我应该将哪些访问令牌(Facebook或Firebase)注入授权标头以调用我的API?