作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在创建一个允许用户通过 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 发送到服务器的自定义端点。该端点应:
ExternalLoginSignInAsync
登录用户SignInManager<User>
的方法|类别: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 可以返回一个 token ,该 token 将被接受为 Authorization
标题
关于c# - 如何在 .Net Core API 中验证 Facebook JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45070275/
我是一名优秀的程序员,十分优秀!