如何在.Net Core API中验证Facebook JWT



我正在创建一个允许用户通过Facebook登录的移动应用程序。登录后,应用程序将保留用于发出进一步请求的持有者令牌。我正在尝试将此令牌传递给 C# .Net Core API。我正在尝试编写尽可能少的身份验证代码,因为自己做很容易出现巨大的安全问题。

目前我在Startup.cs中的代码如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
app.UseJwtBearerAuthentication(new JwtBearerOptions {
AuthenticationScheme = "Bearer",        
});
app.UseFacebookAuthentication(new FacebookOptions {
AppId = "****",
AppSecret = "****",
SignInScheme = "Bearer"
});
app.UseMvc();
}

这样,所有请求都返回 401,即使使用有效的持有者令牌也是如此。现在我不是 100% 确定UseJwtBearerAuthentication甚至与UseFacebookAuthentication兼容,如果是,我确定我在这里缺少一些代码。我应该采取哪些步骤来使其正常工作?

我前几天发布了同样的问题,但我没有得到任何答复。 无论如何,谷歌搜索,我找到了唯一(?(可能的解决方案。 当您的客户登录到Facebook时,您必须将Facebook令牌发送到服务器的自定义端点。 此端点应:

  • 使用Facebook API验证收到的令牌是否有效(非常简单(
  • 尝试使用SignInManager<User>ExternalLoginSignInAsync方法登录用户:var result = await _signInManager.ExternalLoginSignInAsync(provider, userId, isPersistent: false);userId是 Facebook ID 用户的位置
  • 如果结果。成功为假:
    • 使用https://graph.facebook.com/{userId}端点获取 Facebook 用户信息
    • 使用该信息创建用户实体
    • 使用await _userManager.AddLoginAsync(user, userLoginInfo);在数据库中创建用户,其中userLoginInfo应包含provider(Facebook(、userId(Facebook 用户 ID(和application(您的应用名称(
    • 调用await _signInManager.SignInAsync(user, false);对用户进行签名

您可以使用_userManager.FindByIdAsync(userId);从数据库中获取用户

现在,您的 API 可以返回一个令牌,该令牌将被接受为标头Authorization

最新更新