gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:41:03 25 4
gpt4 key购买 nike

我正在创建一个允许用户通过 Facebook 登录的移动应用程序。登录后,该应用程序会保留一个 Bearer token ,用于发出进一步的请求。我正在尝试将此 token 传递给 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,即使是使用有效的 Bearer token 也是如此。现在我不能 100% 确定 UseJwtBearerAuthentication 是否与 UseFacebookAuthentication 兼容,如果是的话我确定我在这里遗漏了一些代码。我应该采取哪些步骤才能使其正常运行?

最佳答案

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

  • 使用 Facebook API 验证收到的 token 是否有效(非常简单)
  • 尝试使用 ExternalLoginSignInAsync 登录用户SignInManager<User>的方法|类别:var result = await _signInManager.ExternalLoginSignInAsync(provider, userId, isPersistent: false);其中 userId是Facebook id用户
  • 如果 result.Succeeded 为假:
    • 使用 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 可以返回一个 token ,该 token 将被接受为 Authorization标题

关于c# - 如何在 .Net Core API 中验证 Facebook JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45070275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com