tVo*_*s42 7 .net c# authentication facebook
我正在创建一个允许用户通过Facebook登录的移动应用程序.登录后,应用程序会保留用于进一步请求的Bearer令牌.我试图将此令牌传递给C#.Net Core API.我试图编写尽可能少的auth代码,因为我自己这样做很容易出现巨大的安全问题.
目前我的代码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();
}
Run Code Online (Sandbox Code Playgroud)
这样,即使使用有效的承载令牌,所有请求都返回401.现在我不是100%肯定UseJwtBearerAuthentication甚至兼容UseFacebookAuthentication,如果它是我确定我在这里缺少一些代码.我应该采取哪些步骤来实现这一目标?
我前几天发布了同样的问题,但没有收到任何答复。不管怎样,谷歌搜索,我找到了唯一(?)可能的解决方案。当您的客户端登录 Facebook 时,您必须将 Facebook 令牌发送到服务器的自定义端点。该端点应:
ExternalLoginSignInAsync尝试使用类方法记录用户SignInManager<User>:Facebook id 用户在var result = await _signInManager.ExternalLoginSignInAsync(provider, userId, isPersistent: false);哪里userIdhttps://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标头的令牌
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |